[unittest] Use Support/thread.h instead of <thread> (second try)
[oota-llvm.git] / unittests / Support / ThreadLocalTest.cpp
1 //===- llvm/unittest/Support/ThreadLocalTest.cpp - ThreadLocal tests ------===//
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 #include "llvm/Support/ThreadLocal.h"
11 #include "gtest/gtest.h"
12 #include <type_traits>
13
14 using namespace llvm;
15 using namespace sys;
16
17 namespace {
18
19 class ThreadLocalTest : public ::testing::Test {
20 };
21
22 struct S {
23   int i;
24 };
25
26 TEST_F(ThreadLocalTest, Basics) {
27   ThreadLocal<const S> x;
28
29   static_assert(
30       std::is_const<std::remove_pointer<decltype(x.get())>::type>::value,
31       "ThreadLocal::get didn't return a pointer to const object");
32
33   EXPECT_EQ(nullptr, x.get());
34
35   S s;
36   x.set(&s);
37   EXPECT_EQ(&s, x.get());
38
39   x.erase();
40   EXPECT_EQ(nullptr, x.get());
41
42   ThreadLocal<S> y;
43
44   static_assert(
45       !std::is_const<std::remove_pointer<decltype(y.get())>::type>::value,
46       "ThreadLocal::get returned a pointer to const object");
47
48   EXPECT_EQ(nullptr, y.get());
49
50   y.set(&s);
51   EXPECT_EQ(&s, y.get());
52
53   y.erase();
54   EXPECT_EQ(nullptr, y.get());
55 }
56
57 }