1603c4be006d8c53905d736bf1f19a49f5ce98276Alexey Samsonov//===-- tsan_vector_test.cc -----------------------------------------------===//
2da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany//
3da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany//                     The LLVM Compiler Infrastructure
4da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany//
5da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany// This file is distributed under the University of Illinois Open Source
6da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany// License. See LICENSE.TXT for details.
7da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany//
8da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany//===----------------------------------------------------------------------===//
9da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany//
10da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany// This file is a part of ThreadSanitizer (TSan), a race detector.
11da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany//
12da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany//===----------------------------------------------------------------------===//
13da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include "tsan_vector.h"
14da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include "tsan_rtl.h"
15da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include "gtest/gtest.h"
16da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany
17da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanynamespace __tsan {
18da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany
19da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya SerebryanyTEST(Vector, Basic) {
20da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  ScopedInRtl in_rtl;
21da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  Vector<int> v(MBlockScopedBuf);
22da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  EXPECT_EQ(v.Size(), (uptr)0);
23da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  v.PushBack(42);
24da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  EXPECT_EQ(v.Size(), (uptr)1);
25da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  EXPECT_EQ(v[0], 42);
26da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  v.PushBack(43);
27da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  EXPECT_EQ(v.Size(), (uptr)2);
28da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  EXPECT_EQ(v[0], 42);
29da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  EXPECT_EQ(v[1], 43);
30da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany}
31da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany
32da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya SerebryanyTEST(Vector, Stride) {
33da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  ScopedInRtl in_rtl;
34da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  Vector<int> v(MBlockScopedBuf);
35da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  for (int i = 0; i < 1000; i++) {
36da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany    v.PushBack(i);
37da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany    EXPECT_EQ(v.Size(), (uptr)(i + 1));
38da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany    EXPECT_EQ(v[i], i);
39da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  }
40da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  for (int i = 0; i < 1000; i++) {
41da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany    EXPECT_EQ(v[i], i);
42da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany  }
43da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany}
44da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany
45da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany}  // namespace __tsan
46