TEST(Flag, MultiThreaded) { Flag f; int count = 0; const int ITERATIONS_COUNT = 100000; auto setter = [&]() { for (int i = 0; i < ITERATIONS_COUNT; ++i) { while (f.IsSet()); f.Set(); } }; auto clearer = [&]() { for (int i = 0; i < ITERATIONS_COUNT; ++i) { while (!f.IsSet()); count++; f.Clear(); } }; std::thread setter_thread(setter); std::thread clearer_thread(clearer); setter_thread.join(); clearer_thread.join(); EXPECT_EQ(ITERATIONS_COUNT, count); }
TEST(Flag, Simple) { Flag f; EXPECT_FALSE(f.IsSet()); f.Set(); EXPECT_TRUE(f.IsSet()); f.Clear(); EXPECT_FALSE(f.IsSet()); f.Set(false); EXPECT_FALSE(f.IsSet()); EXPECT_TRUE(f.TestAndSet()); EXPECT_TRUE(f.TestAndClear()); Flag f2(true); EXPECT_TRUE(f2.IsSet()); }