1 //===-- UUIDTest.cpp ------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "gtest/gtest.h"
10 
11 #include "lldb/Utility/UUID.h"
12 
13 using namespace lldb_private;
14 
TEST(UUIDTest,RelationalOperators)15 TEST(UUIDTest, RelationalOperators) {
16   UUID empty;
17   UUID a16 = UUID::fromData("1234567890123456", 16);
18   UUID b16 = UUID::fromData("1234567890123457", 16);
19   UUID a20 = UUID::fromData("12345678901234567890", 20);
20   UUID b20 = UUID::fromData("12345678900987654321", 20);
21 
22   EXPECT_EQ(empty, empty);
23   EXPECT_EQ(a16, a16);
24   EXPECT_EQ(a20, a20);
25 
26   EXPECT_NE(a16, b16);
27   EXPECT_NE(a20, b20);
28   EXPECT_NE(a16, a20);
29   EXPECT_NE(empty, a16);
30 
31   EXPECT_LT(empty, a16);
32   EXPECT_LT(a16, a20);
33   EXPECT_LT(a16, b16);
34   EXPECT_GT(a20, b20);
35 }
36 
TEST(UUIDTest,Validity)37 TEST(UUIDTest, Validity) {
38   UUID empty;
39   std::vector<uint8_t> zeroes(20, 0);
40   UUID a16 = UUID::fromData(zeroes.data(), 16);
41   UUID a20 = UUID::fromData(zeroes.data(), 20);
42   UUID a16_0 = UUID::fromOptionalData(zeroes.data(), 16);
43   UUID a20_0 = UUID::fromOptionalData(zeroes.data(), 20);
44   UUID from_str;
45   from_str.SetFromStringRef("00000000-0000-0000-0000-000000000000");
46   UUID opt_from_str;
47   opt_from_str.SetFromOptionalStringRef("00000000-0000-0000-0000-000000000000");
48 
49   EXPECT_FALSE(empty);
50   EXPECT_TRUE(a16);
51   EXPECT_TRUE(a20);
52   EXPECT_TRUE(from_str);
53   EXPECT_FALSE(a16_0);
54   EXPECT_FALSE(a20_0);
55   EXPECT_FALSE(opt_from_str);
56 }
57 
TEST(UUIDTest,SetFromStringRef)58 TEST(UUIDTest, SetFromStringRef) {
59   UUID u;
60   EXPECT_TRUE(u.SetFromStringRef("404142434445464748494a4b4c4d4e4f"));
61   EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNO", 16), u);
62 
63   EXPECT_TRUE(u.SetFromStringRef("40-41-42-43-4445464748494a4b4c4d4e4f"));
64   EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNO", 16), u);
65 
66   EXPECT_TRUE(
67       u.SetFromStringRef("40-41-42-43-4445464748494a4b4c4d4e4f-50515253"));
68   EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNOPQRS", 20), u);
69 
70   EXPECT_TRUE(u.SetFromStringRef("40-41-42-43-4445464748494a4b4c4d4e4f"));
71 
72   EXPECT_FALSE(u.SetFromStringRef("40xxxxx"));
73   EXPECT_FALSE(u.SetFromStringRef(""));
74   EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNO", 16), u)
75       << "uuid was changed by failed parse calls";
76 
77   EXPECT_TRUE(u.SetFromStringRef("404142434445464748494a4b4c4d4e4f-50515253"));
78   EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNOPQRS", 20), u);
79 
80   EXPECT_TRUE(u.SetFromStringRef("40414243"));
81   EXPECT_EQ(UUID::fromData("@ABCD", 4), u);
82 
83   EXPECT_FALSE(u.SetFromStringRef("4"));
84 }
85 
TEST(UUIDTest,StringConverion)86 TEST(UUIDTest, StringConverion) {
87   EXPECT_EQ("40414243", UUID::fromData("@ABC", 4).GetAsString());
88   EXPECT_EQ("40414243-4445-4647", UUID::fromData("@ABCDEFG", 8).GetAsString());
89   EXPECT_EQ("40414243-4445-4647-4849-4A4B",
90             UUID::fromData("@ABCDEFGHIJK", 12).GetAsString());
91   EXPECT_EQ("40414243-4445-4647-4849-4A4B4C4D4E4F",
92             UUID::fromData("@ABCDEFGHIJKLMNO", 16).GetAsString());
93   EXPECT_EQ("40414243-4445-4647-4849-4A4B4C4D4E4F-50515253",
94             UUID::fromData("@ABCDEFGHIJKLMNOPQRS", 20).GetAsString());
95 }
96