sanitizer_allocator_test.cc revision a3eca8192505f4796194dd24eb051019f402de99
1//===-- sanitizer_allocator_test.cc ---------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file is a part of ThreadSanitizer/AddressSanitizer runtime.
11//
12//===----------------------------------------------------------------------===//
13#include "sanitizer_common/sanitizer_common.h"
14#include "gtest/gtest.h"
15#include <stdlib.h>
16
17namespace __sanitizer {
18
19TEST(Allocator, Basic) {
20  char *p = (char*)InternalAlloc(10);
21  EXPECT_NE(p, (char*)0);
22  char *p2 = (char*)InternalAlloc(20);
23  EXPECT_NE(p2, (char*)0);
24  EXPECT_NE(p2, p);
25  for (int i = 0; i < 10; i++) {
26    p[i] = 42;
27    EXPECT_EQ(p, InternalAllocBlock(p + i));
28  }
29  for (int i = 0; i < 20; i++) {
30    ((char*)p2)[i] = 42;
31    EXPECT_EQ(p2, InternalAllocBlock(p2 + i));
32  }
33  InternalFree(p);
34  InternalFree(p2);
35}
36
37TEST(Allocator, Stress) {
38  const int kCount = 1000;
39  char *ptrs[kCount];
40  unsigned rnd = 42;
41  for (int i = 0; i < kCount; i++) {
42    uptr sz = rand_r(&rnd) % 1000;
43    char *p = (char*)InternalAlloc(sz);
44    EXPECT_NE(p, (char*)0);
45    for (uptr j = 0; j < sz; j++) {
46      p[j] = 42;
47      EXPECT_EQ(p, InternalAllocBlock(p + j));
48    }
49    ptrs[i] = p;
50  }
51  for (int i = 0; i < kCount; i++) {
52    InternalFree(ptrs[i]);
53  }
54}
55
56}  // namespace __sanitizer
57