sanitizer_libc_test.cc revision eb2809311c94b73c269ccef8d68ae368642e5754
1//===-- sanitizer_libc_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// Tests for sanitizer_libc.h.
10//===----------------------------------------------------------------------===//
11
12#include "sanitizer_common/sanitizer_libc.h"
13#include "gtest/gtest.h"
14
15// A regression test for internal_memmove() implementation.
16TEST(SanitizerCommon, InternalMemmoveRegression) {
17  char src[] = "Hello World";
18  char *dest = src + 6;
19  __sanitizer::internal_memmove(dest, src, 5);
20  EXPECT_EQ(dest[0], src[0]);
21  EXPECT_EQ(dest[4], src[4]);
22}
23
24TEST(SanitizerCommon, mem_is_zero) {
25  size_t size = 128;
26  char *x = new char[size];
27  memset(x, 0, size);
28  for (size_t pos = 0; pos < size; pos++) {
29    x[pos] = 1;
30    for (size_t beg = 0; beg < size; beg++) {
31      for (size_t end = beg; end < size; end++) {
32        // fprintf(stderr, "pos %zd beg %zd end %zd \n", pos, beg, end);
33        if (beg <= pos && pos < end)
34          EXPECT_FALSE(__sanitizer::mem_is_zero(x + beg, end - beg));
35        else
36          EXPECT_TRUE(__sanitizer::mem_is_zero(x + beg, end - beg));
37      }
38    }
39    x[pos] = 0;
40  }
41  delete [] x;
42}
43