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