139148330SRaphael Isemann //===-- FlagsTest.cpp -------------------===---------------------*- C++ -*-===// 239148330SRaphael Isemann // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 639148330SRaphael Isemann // 739148330SRaphael Isemann //===----------------------------------------------------------------------===// 839148330SRaphael Isemann 939148330SRaphael Isemann #include "gtest/gtest.h" 1039148330SRaphael Isemann 1139148330SRaphael Isemann #include "lldb/Utility/Flags.h" 1239148330SRaphael Isemann 1339148330SRaphael Isemann using namespace lldb_private; 1439148330SRaphael Isemann 1539148330SRaphael Isemann enum DummyFlags { 1639148330SRaphael Isemann eFlag0 = 1 << 0, 1739148330SRaphael Isemann eFlag1 = 1 << 1, 1839148330SRaphael Isemann eFlag2 = 1 << 2, 1939148330SRaphael Isemann eAllFlags = (eFlag0 | eFlag1 | eFlag2) 2039148330SRaphael Isemann }; 2139148330SRaphael Isemann 2239148330SRaphael Isemann TEST(Flags, GetBitSize) { 2339148330SRaphael Isemann Flags f; 2439148330SRaphael Isemann // Methods like ClearCount depend on this specific value, so we test 2539148330SRaphael Isemann // against it here. 2639148330SRaphael Isemann EXPECT_EQ(32U, f.GetBitSize()); 2739148330SRaphael Isemann } 2839148330SRaphael Isemann 2939148330SRaphael Isemann TEST(Flags, Reset) { 3039148330SRaphael Isemann Flags f; 3139148330SRaphael Isemann f.Reset(0x3); 3239148330SRaphael Isemann EXPECT_EQ(0x3U, f.Get()); 3339148330SRaphael Isemann EXPECT_EQ(2U, f.SetCount()); 3439148330SRaphael Isemann } 3539148330SRaphael Isemann 3639148330SRaphael Isemann TEST(Flags, Clear) { 3739148330SRaphael Isemann Flags f; 3839148330SRaphael Isemann f.Reset(0x3); 3939148330SRaphael Isemann EXPECT_EQ(2U, f.SetCount()); 4039148330SRaphael Isemann 4139148330SRaphael Isemann f.Clear(0x5); 4239148330SRaphael Isemann EXPECT_EQ(1U, f.SetCount()); 4339148330SRaphael Isemann 4439148330SRaphael Isemann f.Clear(); 4539148330SRaphael Isemann EXPECT_EQ(0U, f.SetCount()); 4639148330SRaphael Isemann } 4739148330SRaphael Isemann 4839148330SRaphael Isemann TEST(Flags, AllSet) { 4939148330SRaphael Isemann Flags f; 5039148330SRaphael Isemann 5139148330SRaphael Isemann EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 5239148330SRaphael Isemann 5339148330SRaphael Isemann f.Set(eFlag0); 5439148330SRaphael Isemann EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 5539148330SRaphael Isemann 5639148330SRaphael Isemann f.Set(eFlag1); 5739148330SRaphael Isemann EXPECT_TRUE(f.AllSet(eFlag0 | eFlag1)); 5839148330SRaphael Isemann 5939148330SRaphael Isemann f.Clear(eFlag1); 6039148330SRaphael Isemann EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 6139148330SRaphael Isemann 6239148330SRaphael Isemann f.Clear(eFlag0); 6339148330SRaphael Isemann EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 6439148330SRaphael Isemann } 6539148330SRaphael Isemann 6639148330SRaphael Isemann TEST(Flags, AnySet) { 6739148330SRaphael Isemann Flags f; 6839148330SRaphael Isemann 6939148330SRaphael Isemann EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1)); 7039148330SRaphael Isemann 7139148330SRaphael Isemann f.Set(eFlag0); 7239148330SRaphael Isemann EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 7339148330SRaphael Isemann 7439148330SRaphael Isemann f.Set(eFlag1); 7539148330SRaphael Isemann EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 7639148330SRaphael Isemann 7739148330SRaphael Isemann f.Clear(eFlag1); 7839148330SRaphael Isemann EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 7939148330SRaphael Isemann 8039148330SRaphael Isemann f.Clear(eFlag0); 8139148330SRaphael Isemann EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1)); 8239148330SRaphael Isemann } 8339148330SRaphael Isemann 8439148330SRaphael Isemann TEST(Flags, Test) { 8539148330SRaphael Isemann Flags f; 8639148330SRaphael Isemann 8739148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag0)); 8839148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag1)); 8939148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag2)); 9039148330SRaphael Isemann 9139148330SRaphael Isemann f.Set(eFlag0); 9239148330SRaphael Isemann EXPECT_TRUE(f.Test(eFlag0)); 9339148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag1)); 9439148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag2)); 9539148330SRaphael Isemann 9639148330SRaphael Isemann f.Set(eFlag1); 9739148330SRaphael Isemann EXPECT_TRUE(f.Test(eFlag0)); 9839148330SRaphael Isemann EXPECT_TRUE(f.Test(eFlag1)); 9939148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag2)); 10039148330SRaphael Isemann 10139148330SRaphael Isemann f.Clear(eFlag0); 10239148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag0)); 10339148330SRaphael Isemann EXPECT_TRUE(f.Test(eFlag1)); 10439148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag2)); 10539148330SRaphael Isemann 10639148330SRaphael Isemann // FIXME: Should Flags assert on Test(eFlag0 | eFlag1) (more than one bit)? 10739148330SRaphael Isemann } 10839148330SRaphael Isemann 10939148330SRaphael Isemann TEST(Flags, AllClear) { 11039148330SRaphael Isemann Flags f; 11139148330SRaphael Isemann 11239148330SRaphael Isemann EXPECT_TRUE(f.AllClear(eFlag0 | eFlag1)); 11339148330SRaphael Isemann 11439148330SRaphael Isemann f.Set(eFlag0); 11539148330SRaphael Isemann EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1)); 11639148330SRaphael Isemann 11739148330SRaphael Isemann f.Set(eFlag1); 11839148330SRaphael Isemann f.Clear(eFlag0); 11939148330SRaphael Isemann EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1)); 12039148330SRaphael Isemann 12139148330SRaphael Isemann f.Clear(eFlag1); 12239148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 12339148330SRaphael Isemann } 12439148330SRaphael Isemann 12539148330SRaphael Isemann TEST(Flags, AnyClear) { 12639148330SRaphael Isemann Flags f; 12739148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 12839148330SRaphael Isemann 12939148330SRaphael Isemann f.Set(eFlag0); 13039148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 13139148330SRaphael Isemann 13239148330SRaphael Isemann f.Set(eFlag1); 13339148330SRaphael Isemann f.Set(eFlag0); 13439148330SRaphael Isemann EXPECT_FALSE(f.AnyClear(eFlag0 | eFlag1)); 13539148330SRaphael Isemann 13639148330SRaphael Isemann f.Clear(eFlag1); 13739148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 13839148330SRaphael Isemann 13939148330SRaphael Isemann f.Clear(eFlag0); 14039148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 14139148330SRaphael Isemann } 14239148330SRaphael Isemann 14339148330SRaphael Isemann TEST(Flags, IsClear) { 14439148330SRaphael Isemann Flags f; 14539148330SRaphael Isemann 14639148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag0)); 14739148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag1)); 14839148330SRaphael Isemann 14939148330SRaphael Isemann f.Set(eFlag0); 15039148330SRaphael Isemann EXPECT_FALSE(f.IsClear(eFlag0)); 15139148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag1)); 15239148330SRaphael Isemann 15339148330SRaphael Isemann f.Set(eFlag1); 15439148330SRaphael Isemann EXPECT_FALSE(f.IsClear(eFlag0)); 15539148330SRaphael Isemann EXPECT_FALSE(f.IsClear(eFlag1)); 15639148330SRaphael Isemann 15739148330SRaphael Isemann f.Clear(eFlag0); 15839148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag0)); 15939148330SRaphael Isemann EXPECT_FALSE(f.IsClear(eFlag1)); 16039148330SRaphael Isemann 16139148330SRaphael Isemann f.Clear(eFlag1); 16239148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag0)); 16339148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag1)); 16439148330SRaphael Isemann } 16539148330SRaphael Isemann 16639148330SRaphael Isemann TEST(Flags, ClearCount) { 16739148330SRaphael Isemann Flags f; 16839148330SRaphael Isemann EXPECT_EQ(32U, f.ClearCount()); 16939148330SRaphael Isemann 17039148330SRaphael Isemann f.Set(eFlag0); 17139148330SRaphael Isemann EXPECT_EQ(31U, f.ClearCount()); 17239148330SRaphael Isemann 17339148330SRaphael Isemann f.Set(eFlag0); 17439148330SRaphael Isemann EXPECT_EQ(31U, f.ClearCount()); 17539148330SRaphael Isemann 17639148330SRaphael Isemann f.Set(eFlag1); 17739148330SRaphael Isemann EXPECT_EQ(30U, f.ClearCount()); 17839148330SRaphael Isemann 17939148330SRaphael Isemann f.Set(eAllFlags); 18039148330SRaphael Isemann EXPECT_EQ(29U, f.ClearCount()); 18139148330SRaphael Isemann } 18239148330SRaphael Isemann 18339148330SRaphael Isemann TEST(Flags, SetCount) { 18439148330SRaphael Isemann Flags f; 18539148330SRaphael Isemann EXPECT_EQ(0U, f.SetCount()); 18639148330SRaphael Isemann 18739148330SRaphael Isemann f.Set(eFlag0); 18839148330SRaphael Isemann EXPECT_EQ(1U, f.SetCount()); 18939148330SRaphael Isemann 19039148330SRaphael Isemann f.Set(eFlag0); 19139148330SRaphael Isemann EXPECT_EQ(1U, f.SetCount()); 19239148330SRaphael Isemann 19339148330SRaphael Isemann f.Set(eFlag1); 19439148330SRaphael Isemann EXPECT_EQ(2U, f.SetCount()); 19539148330SRaphael Isemann 19639148330SRaphael Isemann f.Set(eAllFlags); 19739148330SRaphael Isemann EXPECT_EQ(3U, f.SetCount()); 19839148330SRaphael Isemann } 199