| //===-- tsan_dense_alloc_test.cc ------------------------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file is a part of ThreadSanitizer (TSan), a race detector. |
| // |
| //===----------------------------------------------------------------------===// |
| #include "tsan_dense_alloc.h" |
| #include "tsan_rtl.h" |
| #include "tsan_mman.h" |
| #include "gtest/gtest.h" |
| |
| #include <stdlib.h> |
| #include <stdint.h> |
| #include <map> |
| |
| namespace __tsan { |
| |
| TEST(DenseSlabAlloc, Basic) { |
| typedef DenseSlabAlloc<int, 128, 128> Alloc; |
| typedef Alloc::Cache Cache; |
| typedef Alloc::IndexT IndexT; |
| const int N = 1000; |
| |
| Alloc alloc; |
| Cache cache; |
| alloc.InitCache(&cache); |
| |
| IndexT blocks[N]; |
| for (int ntry = 0; ntry < 3; ntry++) { |
| for (int i = 0; i < N; i++) { |
| IndexT idx = alloc.Alloc(&cache); |
| blocks[i] = idx; |
| EXPECT_NE(idx, 0U); |
| int *v = alloc.Map(idx); |
| *v = i; |
| } |
| |
| for (int i = 0; i < N; i++) { |
| IndexT idx = blocks[i]; |
| int *v = alloc.Map(idx); |
| EXPECT_EQ(*v, i); |
| alloc.Free(&cache, idx); |
| } |
| |
| alloc.FlushCache(&cache); |
| } |
| } |
| |
| } // namespace __tsan |