xref: /aosp_15_r20/external/angle/src/tests/compiler_tests/ImmutableString_test.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 // Copyright 2018 The ANGLE Project Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // ImmutableString_test.cpp:
6 //   Tests for ImmutableString and ImmutableStringBuilder.
7 
8 #include "compiler/translator/ImmutableString.h"
9 #include "compiler/translator/ImmutableStringBuilder.h"
10 #include "compiler/translator/PoolAlloc.h"
11 #include "gtest/gtest.h"
12 
13 using namespace sh;
14 
15 class ImmutableStringBuilderTest : public testing::Test
16 {
17   public:
ImmutableStringBuilderTest()18     ImmutableStringBuilderTest() {}
19 
20   protected:
SetUp()21     void SetUp() override
22     {
23         allocator.push();
24         SetGlobalPoolAllocator(&allocator);
25     }
26 
TearDown()27     void TearDown() override
28     {
29         SetGlobalPoolAllocator(nullptr);
30         allocator.pop();
31     }
32 
33     angle::PoolAllocator allocator;
34 };
35 
36 // Test writing a 32-bit signed int as hexadecimal using ImmutableStringBuilder.
TEST_F(ImmutableStringBuilderTest,AppendHexInt32)37 TEST_F(ImmutableStringBuilderTest, AppendHexInt32)
38 {
39     int32_t i = -1;
40     ImmutableStringBuilder strBuilder(2 * sizeof(int32_t));
41     strBuilder.appendHex(i);
42     ImmutableString str = strBuilder;
43     EXPECT_EQ(std::string("ffffffff"), str.data());
44 }
45 
46 // Test writing a 32-bit unsigned int as hexadecimal using ImmutableStringBuilder.
TEST_F(ImmutableStringBuilderTest,AppendHexUint32)47 TEST_F(ImmutableStringBuilderTest, AppendHexUint32)
48 {
49     uint32_t i = 0x1234beefu;
50     ImmutableStringBuilder strBuilder(2 * sizeof(uint32_t));
51     strBuilder.appendHex(i);
52     ImmutableString str = strBuilder;
53     EXPECT_EQ(std::string("1234beef"), str.data());
54 }
55 
56 // Test writing a 64-bit signed int as hexadecimal using ImmutableStringBuilder.
TEST_F(ImmutableStringBuilderTest,AppendHexInt64)57 TEST_F(ImmutableStringBuilderTest, AppendHexInt64)
58 {
59     int64_t i = -1;
60     ImmutableStringBuilder strBuilder(2 * sizeof(int64_t));
61     strBuilder.appendHex(i);
62     ImmutableString str = strBuilder;
63     EXPECT_EQ(std::string("ffffffffffffffff"), str.data());
64 }
65 
66 // Test writing a 64-bit unsigned int as hexadecimal using ImmutableStringBuilder.
TEST_F(ImmutableStringBuilderTest,AppendHexUint64)67 TEST_F(ImmutableStringBuilderTest, AppendHexUint64)
68 {
69     uint64_t i = 0xfeedcafe9876beefull;
70     ImmutableStringBuilder strBuilder(2 * sizeof(uint64_t));
71     strBuilder.appendHex(i);
72     ImmutableString str = strBuilder;
73     EXPECT_EQ(std::string("feedcafe9876beef"), str.data());
74 }
75 
76 // Test writing a decimal using ImmutableStringBuilder of exact size.
TEST_F(ImmutableStringBuilderTest,AppendDecimal)77 TEST_F(ImmutableStringBuilderTest, AppendDecimal)
78 {
79     ImmutableStringBuilder b1(1);
80     b1 << 1;
81     ImmutableString s1 = b1;
82     EXPECT_EQ(std::string("1"), s1.data());
83 
84     ImmutableStringBuilder b20(2);
85     b20 << 20;
86     ImmutableString s20 = b20;
87     EXPECT_EQ(std::string("20"), s20.data());
88 
89     ImmutableStringBuilder b30000(5);
90     b30000 << 30000;
91     ImmutableString s30000 = b30000;
92     EXPECT_EQ(std::string("30000"), s30000.data());
93 }
94 
95 // Test BuildConcatenatedImmutableString.
TEST_F(ImmutableStringBuilderTest,BuildConcatenatedImmutableString)96 TEST_F(ImmutableStringBuilderTest, BuildConcatenatedImmutableString)
97 {
98     EXPECT_EQ(BuildConcatenatedImmutableString('a', 0, 'b'), "a0b");
99     EXPECT_EQ(BuildConcatenatedImmutableString('a', 10, 'b'), "a10b");
100     EXPECT_EQ(BuildConcatenatedImmutableString('a', -153, 'b'), "a-153b");
101     EXPECT_EQ(BuildConcatenatedImmutableString('a', 78788u, 'b'), "a78788b");
102     EXPECT_EQ(BuildConcatenatedImmutableString('a', INT64_MAX, 'b'), "a9223372036854775807b");
103     EXPECT_EQ(BuildConcatenatedImmutableString('a', INT64_MIN, 'b'), "a-9223372036854775808b");
104     EXPECT_EQ(BuildConcatenatedImmutableString('a', 'c', 'b'), "acb");
105     EXPECT_EQ(BuildConcatenatedImmutableString("ab", 'c', "de"), "abcde");
106 }
107