1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <gtest/gtest.h> 17 18 #ifndef NDEBUG 19 #define NDEBUG // uid_util assert 20 #endif // !NDEBUG 21 22 #include <base/containers/string_view.h> 23 #include <base/util/uid.h> 24 #include <base/util/uid_util.h> 25 26 using namespace BASE_NS; 27 using namespace testing::ext; 28 class UidTest : public testing::Test { 29 public: SetUpTestSuite()30 static void SetUpTestSuite() {} TearDownTestSuite()31 static void TearDownTestSuite() {} SetUp()32 void SetUp() override {} TearDown()33 void TearDown() override {} 34 }; 35 36 HWTEST_F(UidTest, Uid, TestSize.Level1) 37 { 38 ASSERT_EQ(Uid(), Uid()); 39 40 constexpr Uid uid1 { "12345678-90ab-cdef-ABCD-EF1234567890" }; 41 constexpr Uid uid2 { "ac836534-faf7-4919-b65f-eb78df4b8d0d" }; 42 Uid uid3; 43 44 // The Uid "12345678-90ab-cdef-ABCD-EF1234567890" as raw bytes. 45 constexpr uint8_t raw[16] { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 46 0x78, 0x90 }; 47 48 constexpr Uid uid1Raw { raw }; 49 ASSERT_EQ(uid1, uid1Raw); 50 ASSERT_NE(uid2, uid1Raw); 51 52 // Test equality and inequality. 53 ASSERT_EQ(uid1, uid1); 54 ASSERT_NE(uid1, uid2); 55 ASSERT_NE(uid1, uid3); 56 57 // Test assignment. 58 uid3 = uid1; 59 ASSERT_EQ(uid1, uid3); 60 61 // Test cpy cntsr. 62 constexpr Uid uid1Copy(uid1); 63 ASSERT_EQ(uid1, uid1Copy); 64 } 65 66 HWTEST_F(UidTest, UidUtil, TestSize.Level1) 67 { 68 constexpr Uid uid { "12345678-90ab-cdef-abcd-ef1234567890" }; 69 const string_view str { "12345678-90ab-cdef-abcd-ef1234567890" }; 70 71 // Test Uid to string conversion. 72 constexpr auto strB = to_string(uid); 73 ASSERT_EQ(str, strB); 74 75 // Test String to uid conversion. 76 constexpr Uid uidB = StringToUid("12345678-90ab-cdef-abcd-ef1234567890"); 77 ASSERT_EQ(uid, uidB); 78 } 79 80 HWTEST_F(UidTest, Transforms, TestSize.Level1) 81 { 82 ASSERT_EQ(HexToDec('a'), 10); 83 ASSERT_EQ(HexToDec('A'), 10); 84 ASSERT_EQ(HexToDec('5'), 5); 85 ASSERT_EQ(HexToDec('k'), 0); 86 ASSERT_EQ(HexToUint8("a5"), 165); // only first 2 symbols 87 ASSERT_EQ(HexToUint8("a57"), 165); // only first 2 symbols 88 constexpr Uid uidA { "12345678-90ab-cdef-ABCD-EF1234567890" }; 89 constexpr Uid uidB { "12345678-90ab-cdef-BBCD-EF1234567890" }; 90 constexpr Uid uidC { "12345678-90ab-cdef-BBCD-EF1234567891" }; 91 ASSERT_TRUE(uidA < uidB); 92 ASSERT_TRUE(uidB < uidC); 93 ASSERT_TRUE(uidA < uidC); 94 ASSERT_FALSE(uidB < uidB); 95 ASSERT_LT(uidA.compare(uidB), 0); 96 ASSERT_LT(uidB.compare(uidC), 0); 97 ASSERT_GT(uidB.compare(uidA), 0); 98 ASSERT_GT(uidC.compare(uidB), 0); 99 ASSERT_EQ(uidB.compare(uidB), 0); 100 101 { 102 static_assert(IsUidString("12345678-90ab-cdef-ABCD-EF1234567890")); 103 const bool ok = IsUidString("12345678-90ab-cdef-ABCD-EF1234567890"); 104 EXPECT_TRUE(ok); 105 106 static constexpr Uid uid { "12345678-90ab-cdef-ABCD-EF1234567890" }; 107 static constexpr uint8_t raw[16] { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 108 0x56, 0x78, 0x90 }; 109 static constexpr Uid uidRaw { raw }; 110 static_assert(uid == uidRaw); 111 ASSERT_EQ(uid, uidRaw); 112 } 113 { 114 static_assert(!IsUidString("12345678-90ab-cdef-gABC-DEF123456789")); 115 static_assert(!IsUidString("12345678190ab-cdef-ABCD-EF1234567890")); 116 static_assert(!IsUidString("12345678-90ab1cdef-ABCD-EF1234567890")); 117 static_assert(!IsUidString("12345678-90ab-cdef1ABCD-EF1234567890")); 118 static_assert(!IsUidString("12345678-90ab-cdef-ABCD1EF1234567890")); 119 static_assert(!IsUidString("12345678-90ab-cdef-ABCD-EF123456789")); 120 EXPECT_FALSE(IsUidString("12345678-90ab-cdef-ABCD-EF12345678900")); 121 122 static constexpr Uid uid { "12345678-90ab-cdef-gABC-DEF123456789" }; 123 static constexpr Uid uidRaw {}; 124 static_assert(uid == uidRaw); 125 ASSERT_EQ(uid, uidRaw); 126 } 127 } 128