brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 02dddda Raw
56 lines · cpp
1//===-- tsan_dense_alloc_test.cpp -----------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of ThreadSanitizer (TSan), a race detector.10//11//===----------------------------------------------------------------------===//12#include "tsan_dense_alloc.h"13#include "tsan_rtl.h"14#include "tsan_mman.h"15#include "gtest/gtest.h"16 17#include <stdlib.h>18#include <stdint.h>19#include <map>20 21namespace __tsan {22 23TEST(DenseSlabAlloc, Basic) {24  typedef u64 T;25  typedef DenseSlabAlloc<T, 128, 128> Alloc;26  typedef Alloc::Cache Cache;27  typedef Alloc::IndexT IndexT;28  const T N = 1000;29 30  Alloc alloc("test");31  Cache cache;32  alloc.InitCache(&cache);33 34  IndexT blocks[N];35  for (int ntry = 0; ntry < 3; ntry++) {36    for (T i = 0; i < N; i++) {37      IndexT idx = alloc.Alloc(&cache);38      blocks[i] = idx;39      EXPECT_NE(idx, 0U);40      T *v = alloc.Map(idx);41      *v = i;42    }43 44    for (T i = 0; i < N; i++) {45      IndexT idx = blocks[i];46      T *v = alloc.Map(idx);47      EXPECT_EQ(*v, i);48      alloc.Free(&cache, idx);49    }50 51    alloc.FlushCache(&cache);52  }53}54 55}  // namespace __tsan56