139148330SRaphael Isemann //===-- FlagsTest.cpp -------------------===---------------------*- C++ -*-===// 239148330SRaphael Isemann // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler 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 } 3439148330SRaphael Isemann 3539148330SRaphael Isemann TEST(Flags, Clear) { 3639148330SRaphael Isemann Flags f; 3739148330SRaphael Isemann f.Reset(0x3); 38*0d8a0086SRaphael Isemann EXPECT_EQ(0x3U, f.Get()); 3939148330SRaphael Isemann 4039148330SRaphael Isemann f.Clear(0x5); 41*0d8a0086SRaphael Isemann EXPECT_EQ(0x2U, f.Get()); 4239148330SRaphael Isemann 4339148330SRaphael Isemann f.Clear(); 44*0d8a0086SRaphael Isemann EXPECT_EQ(0x0U, f.Get()); 4539148330SRaphael Isemann } 4639148330SRaphael Isemann 4739148330SRaphael Isemann TEST(Flags, AllSet) { 4839148330SRaphael Isemann Flags f; 4939148330SRaphael Isemann 5039148330SRaphael Isemann EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 5139148330SRaphael Isemann 5239148330SRaphael Isemann f.Set(eFlag0); 5339148330SRaphael Isemann EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 5439148330SRaphael Isemann 5539148330SRaphael Isemann f.Set(eFlag1); 5639148330SRaphael Isemann EXPECT_TRUE(f.AllSet(eFlag0 | eFlag1)); 5739148330SRaphael Isemann 5839148330SRaphael Isemann f.Clear(eFlag1); 5939148330SRaphael Isemann EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 6039148330SRaphael Isemann 6139148330SRaphael Isemann f.Clear(eFlag0); 6239148330SRaphael Isemann EXPECT_FALSE(f.AllSet(eFlag0 | eFlag1)); 6339148330SRaphael Isemann } 6439148330SRaphael Isemann 6539148330SRaphael Isemann TEST(Flags, AnySet) { 6639148330SRaphael Isemann Flags f; 6739148330SRaphael Isemann 6839148330SRaphael Isemann EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1)); 6939148330SRaphael Isemann 7039148330SRaphael Isemann f.Set(eFlag0); 7139148330SRaphael Isemann EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 7239148330SRaphael Isemann 7339148330SRaphael Isemann f.Set(eFlag1); 7439148330SRaphael Isemann EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 7539148330SRaphael Isemann 7639148330SRaphael Isemann f.Clear(eFlag1); 7739148330SRaphael Isemann EXPECT_TRUE(f.AnySet(eFlag0 | eFlag1)); 7839148330SRaphael Isemann 7939148330SRaphael Isemann f.Clear(eFlag0); 8039148330SRaphael Isemann EXPECT_FALSE(f.AnySet(eFlag0 | eFlag1)); 8139148330SRaphael Isemann } 8239148330SRaphael Isemann 8339148330SRaphael Isemann TEST(Flags, Test) { 8439148330SRaphael Isemann Flags f; 8539148330SRaphael Isemann 8639148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag0)); 8739148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag1)); 8839148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag2)); 8939148330SRaphael Isemann 9039148330SRaphael Isemann f.Set(eFlag0); 9139148330SRaphael Isemann EXPECT_TRUE(f.Test(eFlag0)); 9239148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag1)); 9339148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag2)); 9439148330SRaphael Isemann 9539148330SRaphael Isemann f.Set(eFlag1); 9639148330SRaphael Isemann EXPECT_TRUE(f.Test(eFlag0)); 9739148330SRaphael Isemann EXPECT_TRUE(f.Test(eFlag1)); 9839148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag2)); 9939148330SRaphael Isemann 10039148330SRaphael Isemann f.Clear(eFlag0); 10139148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag0)); 10239148330SRaphael Isemann EXPECT_TRUE(f.Test(eFlag1)); 10339148330SRaphael Isemann EXPECT_FALSE(f.Test(eFlag2)); 10439148330SRaphael Isemann 10539148330SRaphael Isemann // FIXME: Should Flags assert on Test(eFlag0 | eFlag1) (more than one bit)? 10639148330SRaphael Isemann } 10739148330SRaphael Isemann 10839148330SRaphael Isemann TEST(Flags, AllClear) { 10939148330SRaphael Isemann Flags f; 11039148330SRaphael Isemann 11139148330SRaphael Isemann EXPECT_TRUE(f.AllClear(eFlag0 | eFlag1)); 11239148330SRaphael Isemann 11339148330SRaphael Isemann f.Set(eFlag0); 11439148330SRaphael Isemann EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1)); 11539148330SRaphael Isemann 11639148330SRaphael Isemann f.Set(eFlag1); 11739148330SRaphael Isemann f.Clear(eFlag0); 11839148330SRaphael Isemann EXPECT_FALSE(f.AllClear(eFlag0 | eFlag1)); 11939148330SRaphael Isemann 12039148330SRaphael Isemann f.Clear(eFlag1); 12139148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 12239148330SRaphael Isemann } 12339148330SRaphael Isemann 12439148330SRaphael Isemann TEST(Flags, AnyClear) { 12539148330SRaphael Isemann Flags f; 12639148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 12739148330SRaphael Isemann 12839148330SRaphael Isemann f.Set(eFlag0); 12939148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 13039148330SRaphael Isemann 13139148330SRaphael Isemann f.Set(eFlag1); 13239148330SRaphael Isemann f.Set(eFlag0); 13339148330SRaphael Isemann EXPECT_FALSE(f.AnyClear(eFlag0 | eFlag1)); 13439148330SRaphael Isemann 13539148330SRaphael Isemann f.Clear(eFlag1); 13639148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 13739148330SRaphael Isemann 13839148330SRaphael Isemann f.Clear(eFlag0); 13939148330SRaphael Isemann EXPECT_TRUE(f.AnyClear(eFlag0 | eFlag1)); 14039148330SRaphael Isemann } 14139148330SRaphael Isemann 14239148330SRaphael Isemann TEST(Flags, IsClear) { 14339148330SRaphael Isemann Flags f; 14439148330SRaphael Isemann 14539148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag0)); 14639148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag1)); 14739148330SRaphael Isemann 14839148330SRaphael Isemann f.Set(eFlag0); 14939148330SRaphael Isemann EXPECT_FALSE(f.IsClear(eFlag0)); 15039148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag1)); 15139148330SRaphael Isemann 15239148330SRaphael Isemann f.Set(eFlag1); 15339148330SRaphael Isemann EXPECT_FALSE(f.IsClear(eFlag0)); 15439148330SRaphael Isemann EXPECT_FALSE(f.IsClear(eFlag1)); 15539148330SRaphael Isemann 15639148330SRaphael Isemann f.Clear(eFlag0); 15739148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag0)); 15839148330SRaphael Isemann EXPECT_FALSE(f.IsClear(eFlag1)); 15939148330SRaphael Isemann 16039148330SRaphael Isemann f.Clear(eFlag1); 16139148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag0)); 16239148330SRaphael Isemann EXPECT_TRUE(f.IsClear(eFlag1)); 16339148330SRaphael Isemann } 164