18bf80f4bSopenharmony_ci/*
28bf80f4bSopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd.
38bf80f4bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
48bf80f4bSopenharmony_ci * you may not use this file except in compliance with the License.
58bf80f4bSopenharmony_ci * You may obtain a copy of the License at
68bf80f4bSopenharmony_ci *
78bf80f4bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
88bf80f4bSopenharmony_ci *
98bf80f4bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
108bf80f4bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
118bf80f4bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128bf80f4bSopenharmony_ci * See the License for the specific language governing permissions and
138bf80f4bSopenharmony_ci * limitations under the License.
148bf80f4bSopenharmony_ci */
158bf80f4bSopenharmony_ci
168bf80f4bSopenharmony_ci#include <gmock/gmock.h>
178bf80f4bSopenharmony_ci#include <gtest/gtest.h>
188bf80f4bSopenharmony_ci
198bf80f4bSopenharmony_ci#include <meta/api/util.h>
208bf80f4bSopenharmony_ci#include <meta/base/bit_field.h>
218bf80f4bSopenharmony_ci#include <meta/ext/object.h>
228bf80f4bSopenharmony_ci#include <meta/interface/intf_object.h>
238bf80f4bSopenharmony_ci#include <meta/interface/intf_object_registry.h>
248bf80f4bSopenharmony_ci
258bf80f4bSopenharmony_ci#include "src/test_runner.h"
268bf80f4bSopenharmony_ci
278bf80f4bSopenharmony_cinamespace {
288bf80f4bSopenharmony_ci    const int TESTVALUE = 16;
298bf80f4bSopenharmony_ci}
308bf80f4bSopenharmony_ci
318bf80f4bSopenharmony_cienum TestFlagBits : uint32_t {
328bf80f4bSopenharmony_ci    FLAG1 = 1,
338bf80f4bSopenharmony_ci    FLAG2 = 2,
348bf80f4bSopenharmony_ci    FLAG4 = 4,
358bf80f4bSopenharmony_ci};
368bf80f4bSopenharmony_ci
378bf80f4bSopenharmony_ciusing TestFlags = META_NS::EnumBitField<TestFlagBits, uint64_t>;
388bf80f4bSopenharmony_ciMETA_TYPE(TestFlags)
398bf80f4bSopenharmony_ci
408bf80f4bSopenharmony_ciMETA_BEGIN_NAMESPACE()
418bf80f4bSopenharmony_ci
428bf80f4bSopenharmony_ciusing namespace testing::ext;
438bf80f4bSopenharmony_ci
448bf80f4bSopenharmony_ciMETA_REGISTER_INTERFACE(ITestFlagsInterface, "eba09b49-6efe-4b97-b809-981569a935e7")
458bf80f4bSopenharmony_ci
468bf80f4bSopenharmony_ciclass ITestFlagsInterface : public CORE_NS::IInterface {
478bf80f4bSopenharmony_ci    META_INTERFACE2(CORE_NS::IInterface, ITestFlagsInterface)
488bf80f4bSopenharmony_cipublic:
498bf80f4bSopenharmony_ci    META_PROPERTY(TestFlags, Flags);
508bf80f4bSopenharmony_ci};
518bf80f4bSopenharmony_ci
528bf80f4bSopenharmony_ciMETA_REGISTER_CLASS(
538bf80f4bSopenharmony_ci    BitfieldPropertyObject, "e62b0ab3-b07d-4423-b2bc-d4a522db8ded", META_NS::ObjectCategoryBits::NO_CATEGORY)
548bf80f4bSopenharmony_ci
558bf80f4bSopenharmony_ciclass BitfieldPropertyObject final
568bf80f4bSopenharmony_ci    : public META_NS::MetaObjectFwd<BitfieldPropertyObject, ClassId::BitfieldPropertyObject,
578bf80f4bSopenharmony_ci        META_NS::ClassId::MetaObject, ITestFlagsInterface> {
588bf80f4bSopenharmony_ci    META_IMPLEMENT_PROPERTY(TestFlags, Flags, TestFlagBits::FLAG2)
598bf80f4bSopenharmony_ci};
608bf80f4bSopenharmony_ci
618bf80f4bSopenharmony_ci
628bf80f4bSopenharmony_ciclass BitfieldPropertyTest : public testing::Test {
638bf80f4bSopenharmony_cipublic:
648bf80f4bSopenharmony_ci    static void SetUpTestSuite()
658bf80f4bSopenharmony_ci    {
668bf80f4bSopenharmony_ci        SetTest();
678bf80f4bSopenharmony_ci        RegisterObjectType<BitfieldPropertyObject>();
688bf80f4bSopenharmony_ci    }
698bf80f4bSopenharmony_ci    static void TearDownTestSuite()
708bf80f4bSopenharmony_ci    {
718bf80f4bSopenharmony_ci        UnregisterObjectType<BitfieldPropertyObject>();
728bf80f4bSopenharmony_ci        ResetTest();
738bf80f4bSopenharmony_ci    }
748bf80f4bSopenharmony_ci    void SetUp() override
758bf80f4bSopenharmony_ci    {
768bf80f4bSopenharmony_ci        object_ = Meta::GetObjectRegistry().Create<ITestFlagsInterface> (ClassId::BitfieldPropertyObject);
778bf80f4bSopenharmony_ci    }
788bf80f4bSopenharmony_ci    void TearDown() override
798bf80f4bSopenharmony_ci    {
808bf80f4bSopenharmony_ci        object_.reset();
818bf80f4bSopenharmony_ci    }
828bf80f4bSopenharmony_ciprotected:
838bf80f4bSopenharmony_ci    ITestFlagsInterface::Ptr object_;
848bf80f4bSopenharmony_ci};
858bf80f4bSopenharmony_ci
868bf80f4bSopenharmony_ciMATCHER_P (ExactBitsSet, n, "")
878bf80f4bSopenharmony_ci{
888bf80f4bSopenharmony_ci    return arg == n;
898bf80f4bSopenharmony_ci}
908bf80f4bSopenharmony_ci
918bf80f4bSopenharmony_ci/**
928bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
938bf80f4bSopenharmony_ci * @tc.desc: test GetValue function
948bf80f4bSopenharmony_ci * @tc.type: FUNC
958bf80f4bSopenharmony_ci * @tc.require: I7DMS1
968bf80f4bSopenharmony_ci */
978bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, GetValue, TestSize.Level1)
988bf80f4bSopenharmony_ci{
998bf80f4bSopenharmony_ci    EXPECT_EQ(GetValue(object_->Flags()), TestFlagBits::FLAG2);
1008bf80f4bSopenharmony_ci}
1018bf80f4bSopenharmony_ci
1028bf80f4bSopenharmony_ci/**
1038bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
1048bf80f4bSopenharmony_ci * @tc.desc: test SetValue function
1058bf80f4bSopenharmony_ci * @tc.type: FUNC
1068bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1078bf80f4bSopenharmony_ci */
1088bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, SetValue, TestSize.Level1)
1098bf80f4bSopenharmony_ci{
1108bf80f4bSopenharmony_ci    SetValue(object_->Flags(), TestFlagBits::FLAG1 | TestFlagBits::FLAG4);
1118bf80f4bSopenharmony_ci    EXPECT_EQ(GetValue(object_->Flags()), TestFlagBits::FLAG1 | TestFlagBits::FLAG4);
1128bf80f4bSopenharmony_ci}
1138bf80f4bSopenharmony_ci
1148bf80f4bSopenharmony_ci/**
1158bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
1168bf80f4bSopenharmony_ci * @tc.desc: test SetValue function
1178bf80f4bSopenharmony_ci * @tc.type: FUNC
1188bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1198bf80f4bSopenharmony_ci */
1208bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, SetValueOp, TestSize.Level1)
1218bf80f4bSopenharmony_ci{
1228bf80f4bSopenharmony_ci    TestFlags value1 = TestFlagBits::FLAG2;
1238bf80f4bSopenharmony_ci    SetValue(object_->Flags(), value1 | TestFlagBits::FLAG1 | TestFlagBits::FLAG4);
1248bf80f4bSopenharmony_ci    EXPECT_EQ(GetValue(object_->Flags()), TestFlagBits::FLAG1 | TestFlagBits::FLAG2 | TestFlagBits::FLAG4);
1258bf80f4bSopenharmony_ci}
1268bf80f4bSopenharmony_ci
1278bf80f4bSopenharmony_ci/**
1288bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
1298bf80f4bSopenharmony_ci * @tc.desc: test Or function
1308bf80f4bSopenharmony_ci * @tc.type: FUNC
1318bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1328bf80f4bSopenharmony_ci */
1338bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, Or, TestSize.Level1)
1348bf80f4bSopenharmony_ci{
1358bf80f4bSopenharmony_ci    EnumBitField<TestFlagBits> value1(TestFlagBits::FLAG1);
1368bf80f4bSopenharmony_ci    EnumBitField<TestFlagBits> value2(TestFlagBits::FLAG2 | TestFlagBits::FLAG4);
1378bf80f4bSopenharmony_ci    EXPECT_THAT(
1388bf80f4bSopenharmony_ci        (value1 | value2).GetValue(), ExactBitsSet(TestFlagBits::FLAG1 | TestFlagBits::FLAG2 | TestFlagBits::FLAG4));
1398bf80f4bSopenharmony_ci}
1408bf80f4bSopenharmony_ci
1418bf80f4bSopenharmony_ci/**
1428bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
1438bf80f4bSopenharmony_ci * @tc.desc: test And function
1448bf80f4bSopenharmony_ci * @tc.type: FUNC
1458bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1468bf80f4bSopenharmony_ci */
1478bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, And, TestSize.Level1)
1488bf80f4bSopenharmony_ci{
1498bf80f4bSopenharmony_ci    EnumBitField<TestFlagBits> value1(TestFlagBits::FLAG1);
1508bf80f4bSopenharmony_ci    EnumBitField<TestFlagBits> value2(TestFlagBits::FLAG1 | TestFlagBits::FLAG2 | TestFlagBits::FLAG4);
1518bf80f4bSopenharmony_ci    EXPECT_THAT((value1 & value2).GetValue(), ExactBitsSet(TestFlagBits::FLAG1));
1528bf80f4bSopenharmony_ci}
1538bf80f4bSopenharmony_ci
1548bf80f4bSopenharmony_ci/**
1558bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
1568bf80f4bSopenharmony_ci * @tc.desc: test Xor function
1578bf80f4bSopenharmony_ci * @tc.type: FUNC
1588bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1598bf80f4bSopenharmony_ci */
1608bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, Xor, TestSize.Level1)
1618bf80f4bSopenharmony_ci{
1628bf80f4bSopenharmony_ci    EnumBitField<TestFlagBits> value1(TestFlagBits::FLAG1);
1638bf80f4bSopenharmony_ci    EnumBitField<TestFlagBits> value2(TestFlagBits::FLAG1 | TestFlagBits::FLAG2 | TestFlagBits::FLAG4);
1648bf80f4bSopenharmony_ci    EXPECT_THAT((value1 ^ value2).GetValue(), ExactBitsSet(TestFlagBits::FLAG2 | TestFlagBits::FLAG4));
1658bf80f4bSopenharmony_ci}
1668bf80f4bSopenharmony_ci
1678bf80f4bSopenharmony_ci/**
1688bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
1698bf80f4bSopenharmony_ci * @tc.desc: test Not function
1708bf80f4bSopenharmony_ci * @tc.type: FUNC
1718bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1728bf80f4bSopenharmony_ci */
1738bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, Not, TestSize.Level1)
1748bf80f4bSopenharmony_ci{
1758bf80f4bSopenharmony_ci    EnumBitField<TestFlagBits> value1(TestFlagBits::FLAG1);
1768bf80f4bSopenharmony_ci    EXPECT_THAT((~value1).GetValue(), ExactBitsSet(~TestFlagBits::FLAG1));
1778bf80f4bSopenharmony_ci}
1788bf80f4bSopenharmony_ci
1798bf80f4bSopenharmony_ci/**
1808bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
1818bf80f4bSopenharmony_ci * @tc.desc: test SetAndClear function
1828bf80f4bSopenharmony_ci * @tc.type: FUNC
1838bf80f4bSopenharmony_ci * @tc.require: I7DMS1
1848bf80f4bSopenharmony_ci */
1858bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, SetAndClear, TestSize.Level1)
1868bf80f4bSopenharmony_ci{
1878bf80f4bSopenharmony_ci    EnumBitField<TestFlagBits> value(TestFlagBits::FLAG1);
1888bf80f4bSopenharmony_ci    EXPECT_TRUE(value.IsSet(TestFlagBits::FLAG1));
1898bf80f4bSopenharmony_ci    EXPECT_FALSE(value.IsSet(TestFlagBits::FLAG2));
1908bf80f4bSopenharmony_ci
1918bf80f4bSopenharmony_ci    value.Set(TestFlagBits::FLAG2);
1928bf80f4bSopenharmony_ci    EXPECT_TRUE(value.IsSet(TestFlagBits::FLAG2));
1938bf80f4bSopenharmony_ci
1948bf80f4bSopenharmony_ci    value.Clear(TestFlagBits::FLAG1);
1958bf80f4bSopenharmony_ci    EXPECT_FALSE(value.IsSet(TestFlagBits::FLAG1));
1968bf80f4bSopenharmony_ci    EXPECT_TRUE(value.IsSet(TestFlagBits::FLAG2));
1978bf80f4bSopenharmony_ci}
1988bf80f4bSopenharmony_ci
1998bf80f4bSopenharmony_cienum ExtTestFlagBits : uint32_t {
2008bf80f4bSopenharmony_ci    FLAG1 = 1,
2018bf80f4bSopenharmony_ci    FLAG2 = 2,
2028bf80f4bSopenharmony_ci    FLAG4 = 4,
2038bf80f4bSopenharmony_ci};
2048bf80f4bSopenharmony_ci
2058bf80f4bSopenharmony_ciusing ExtTestFlags = META_NS::SubEnumBitField<ExtTestFlagBits, TestFlags, TESTVALUE, TESTVALUE>;
2068bf80f4bSopenharmony_ci
2078bf80f4bSopenharmony_ci/**
2088bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
2098bf80f4bSopenharmony_ci * @tc.desc: test Value function
2108bf80f4bSopenharmony_ci * @tc.type: FUNC
2118bf80f4bSopenharmony_ci * @tc.require: I7DMS1
2128bf80f4bSopenharmony_ci */
2138bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, Value, TestSize.Level1)
2148bf80f4bSopenharmony_ci{
2158bf80f4bSopenharmony_ci    TestFlags base(TestFlagBits::FLAG1);
2168bf80f4bSopenharmony_ci    ExtTestFlags ext(ExtTestFlagBits::FLAG2);
2178bf80f4bSopenharmony_ci
2188bf80f4bSopenharmony_ci    TestFlags res = base | ext;
2198bf80f4bSopenharmony_ci    EXPECT_THAT(res.GetValue(), ExactBitsSet(TestFlagBits::FLAG1 | (ExtTestFlagBits::FLAG2 << 16)));
2208bf80f4bSopenharmony_ci
2218bf80f4bSopenharmony_ci    ExtTestFlags sub(res);
2228bf80f4bSopenharmony_ci    EXPECT_EQ(ext, sub);
2238bf80f4bSopenharmony_ci    EXPECT_THAT(sub.GetValue(), ExactBitsSet(ExtTestFlagBits::FLAG2 << 16));
2248bf80f4bSopenharmony_ci    EXPECT_THAT((ExtTestFlagBits)sub, ExactBitsSet(ExtTestFlagBits::FLAG2));
2258bf80f4bSopenharmony_ci}
2268bf80f4bSopenharmony_ci
2278bf80f4bSopenharmony_ci/**
2288bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
2298bf80f4bSopenharmony_ci * @tc.desc: test Or1 function
2308bf80f4bSopenharmony_ci * @tc.type: FUNC
2318bf80f4bSopenharmony_ci * @tc.require: I7DMS1
2328bf80f4bSopenharmony_ci */
2338bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, Or1, TestSize.Level1)
2348bf80f4bSopenharmony_ci{
2358bf80f4bSopenharmony_ci    TestFlags base(TestFlagBits::FLAG1);
2368bf80f4bSopenharmony_ci    ExtTestFlags ext(ExtTestFlagBits::FLAG2);
2378bf80f4bSopenharmony_ci
2388bf80f4bSopenharmony_ci    EXPECT_THAT(base | ext, ExactBitsSet(TestFlagBits::FLAG1 | (ExtTestFlagBits::FLAG2 << 16)));
2398bf80f4bSopenharmony_ci}
2408bf80f4bSopenharmony_ci
2418bf80f4bSopenharmony_ci/**
2428bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
2438bf80f4bSopenharmony_ci * @tc.desc: test And1 function
2448bf80f4bSopenharmony_ci * @tc.type: FUNC
2458bf80f4bSopenharmony_ci * @tc.require: I7DMS1
2468bf80f4bSopenharmony_ci */
2478bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, And1, TestSize.Level1)
2488bf80f4bSopenharmony_ci{
2498bf80f4bSopenharmony_ci    TestFlags base(TestFlagBits::FLAG1);
2508bf80f4bSopenharmony_ci    ExtTestFlags ext(ExtTestFlagBits::FLAG2);
2518bf80f4bSopenharmony_ci    TestFlags res = base | ext;
2528bf80f4bSopenharmony_ci    EXPECT_THAT(res & ext, ExactBitsSet(ExtTestFlagBits::FLAG2 << 16));
2538bf80f4bSopenharmony_ci    EXPECT_THAT(res & base, ExactBitsSet(TestFlagBits::FLAG1));
2548bf80f4bSopenharmony_ci}
2558bf80f4bSopenharmony_ci
2568bf80f4bSopenharmony_ci/**
2578bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
2588bf80f4bSopenharmony_ci * @tc.desc: test Xor1 function
2598bf80f4bSopenharmony_ci * @tc.type: FUNC
2608bf80f4bSopenharmony_ci * @tc.require: I7DMS1
2618bf80f4bSopenharmony_ci */
2628bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, Xor1, TestSize.Level1)
2638bf80f4bSopenharmony_ci{
2648bf80f4bSopenharmony_ci    TestFlags base(TestFlagBits::FLAG1);
2658bf80f4bSopenharmony_ci    ExtTestFlags ext(ExtTestFlagBits::FLAG2);
2668bf80f4bSopenharmony_ci    TestFlags res = base | ext;
2678bf80f4bSopenharmony_ci    EXPECT_THAT(res ^ ext, ExactBitsSet(TestFlagBits::FLAG1));
2688bf80f4bSopenharmony_ci    EXPECT_THAT(res ^ base, ExactBitsSet(ExtTestFlagBits::FLAG2 << 16));
2698bf80f4bSopenharmony_ci}
2708bf80f4bSopenharmony_ci
2718bf80f4bSopenharmony_ci/**
2728bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
2738bf80f4bSopenharmony_ci * @tc.desc: test Not1 function
2748bf80f4bSopenharmony_ci * @tc.type: FUNC
2758bf80f4bSopenharmony_ci * @tc.require: I7DMS1
2768bf80f4bSopenharmony_ci */
2778bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, Not1, TestSize.Level1)
2788bf80f4bSopenharmony_ci{
2798bf80f4bSopenharmony_ci    TestFlags base(TestFlagBits::FLAG1);
2808bf80f4bSopenharmony_ci    ExtTestFlags ext(ExtTestFlagBits::FLAG2);
2818bf80f4bSopenharmony_ci    TestFlags res = base | ext;
2828bf80f4bSopenharmony_ci    EXPECT_THAT(res & ~ext, ExactBitsSet(TestFlagBits::FLAG1));
2838bf80f4bSopenharmony_ci    EXPECT_THAT(res & ~base, ExactBitsSet(ExtTestFlagBits::FLAG2 << 16));
2848bf80f4bSopenharmony_ci}
2858bf80f4bSopenharmony_ci
2868bf80f4bSopenharmony_ci/**
2878bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
2888bf80f4bSopenharmony_ci * @tc.desc: test SetAndClear1 function
2898bf80f4bSopenharmony_ci * @tc.type: FUNC
2908bf80f4bSopenharmony_ci * @tc.require: I7DMS1
2918bf80f4bSopenharmony_ci */
2928bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, SetAndClear1, TestSize.Level1)
2938bf80f4bSopenharmony_ci{
2948bf80f4bSopenharmony_ci    TestFlags base(TestFlagBits::FLAG1);
2958bf80f4bSopenharmony_ci    ExtTestFlags ext(ExtTestFlagBits::FLAG2);
2968bf80f4bSopenharmony_ci
2978bf80f4bSopenharmony_ci    EXPECT_FALSE(ext.IsSet(ExtTestFlagBits::FLAG1));
2988bf80f4bSopenharmony_ci    EXPECT_TRUE(ext.IsSet(ExtTestFlagBits::FLAG2));
2998bf80f4bSopenharmony_ci    ext.Set(ExtTestFlagBits::FLAG1);
3008bf80f4bSopenharmony_ci    EXPECT_TRUE(ext.IsSet(ExtTestFlagBits::FLAG1));
3018bf80f4bSopenharmony_ci    ext.Clear(ExtTestFlagBits::FLAG2);
3028bf80f4bSopenharmony_ci    EXPECT_FALSE(ext.IsSet(ExtTestFlagBits::FLAG2));
3038bf80f4bSopenharmony_ci    EXPECT_TRUE(ext.IsSet(ExtTestFlagBits::FLAG1));
3048bf80f4bSopenharmony_ci
3058bf80f4bSopenharmony_ci    TestFlags value = base | ext;
3068bf80f4bSopenharmony_ci    EXPECT_TRUE(value.IsSet(TestFlagBits::FLAG1));
3078bf80f4bSopenharmony_ci    EXPECT_FALSE(value.IsSet(TestFlagBits::FLAG2));
3088bf80f4bSopenharmony_ci    value.Clear(TestFlagBits::FLAG1);
3098bf80f4bSopenharmony_ci    ExtTestFlags ext2 = value;
3108bf80f4bSopenharmony_ci    EXPECT_FALSE(ext2.IsSet(ExtTestFlagBits::FLAG2));
3118bf80f4bSopenharmony_ci    EXPECT_TRUE(ext2.IsSet(ExtTestFlagBits::FLAG1));
3128bf80f4bSopenharmony_ci}
3138bf80f4bSopenharmony_ci
3148bf80f4bSopenharmony_ci/**
3158bf80f4bSopenharmony_ci * @tc.name: BitfieldPropertyTest
3168bf80f4bSopenharmony_ci * @tc.desc: test SetAndClear1 function
3178bf80f4bSopenharmony_ci * @tc.type: FUNC
3188bf80f4bSopenharmony_ci * @tc.require: I7DMS1
3198bf80f4bSopenharmony_ci */
3208bf80f4bSopenharmony_ciHWTEST_F(BitfieldPropertyTest, SetSubBits, TestSize.Level1)
3218bf80f4bSopenharmony_ci{
3228bf80f4bSopenharmony_ci    TestFlags base(TestFlagBits::FLAG1);
3238bf80f4bSopenharmony_ci    ExtTestFlags ext(ExtTestFlagBits::FLAG2);
3248bf80f4bSopenharmony_ci
3258bf80f4bSopenharmony_ci    base.SetSubBits(ext);
3268bf80f4bSopenharmony_ci    EXPECT_TRUE(base.IsSet(TestFlagBits::FLAG1));
3278bf80f4bSopenharmony_ci    EXPECT_FALSE(base.IsSet(TestFlagBits::FLAG2));
3288bf80f4bSopenharmony_ci
3298bf80f4bSopenharmony_ci    ExtTestFlags ext2 = base;
3308bf80f4bSopenharmony_ci    EXPECT_TRUE(ext2.IsSet(ExtTestFlagBits::FLAG2));
3318bf80f4bSopenharmony_ci    EXPECT_FALSE(ext2.IsSet(ExtTestFlagBits::FLAG1));
3328bf80f4bSopenharmony_ci}
3338bf80f4bSopenharmony_ciMETA_END_NAMESPACE()