xref: /aosp_15_r20/external/perfetto/src/base/string_writer_unittest.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "perfetto/ext/base/string_writer.h"
18 
19 #include "test/gtest_and_gmock.h"
20 
21 namespace perfetto {
22 namespace base {
23 namespace {
24 
TEST(StringWriterTest,BasicCases)25 TEST(StringWriterTest, BasicCases) {
26   char buffer[128];
27   {
28     base::StringWriter writer(buffer, sizeof(buffer));
29     writer.AppendChar('0');
30     ASSERT_EQ(writer.GetStringView().ToStdString(), "0");
31   }
32   {
33     base::StringWriter writer(buffer, sizeof(buffer));
34     writer.AppendInt(132545);
35     ASSERT_EQ(writer.GetStringView().ToStdString(), "132545");
36   }
37   {
38     base::StringWriter writer(buffer, sizeof(buffer));
39     writer.AppendUnsignedInt(523);
40     ASSERT_EQ(writer.GetStringView().ToStdString(), "523");
41   }
42   {
43     base::StringWriter writer(buffer, sizeof(buffer));
44     writer.AppendPaddedInt<'0', 3>(0);
45     ASSERT_EQ(writer.GetStringView().ToStdString(), "000");
46   }
47   {
48     base::StringWriter writer(buffer, sizeof(buffer));
49     writer.AppendPaddedInt<'0', 1>(1);
50     ASSERT_EQ(writer.GetStringView().ToStdString(), "1");
51   }
52   {
53     base::StringWriter writer(buffer, sizeof(buffer));
54     writer.AppendPaddedInt<'0', 3>(1);
55     ASSERT_EQ(writer.GetStringView().ToStdString(), "001");
56   }
57   {
58     base::StringWriter writer(buffer, sizeof(buffer));
59     writer.AppendPaddedInt<'0', 0>(1);
60     ASSERT_EQ(writer.GetStringView().ToStdString(), "1");
61   }
62   {
63     base::StringWriter writer(buffer, sizeof(buffer));
64     writer.AppendPaddedInt<' ', 5>(123);
65     ASSERT_EQ(writer.GetStringView().ToStdString(), "  123");
66   }
67   {
68     base::StringWriter writer(buffer, sizeof(buffer));
69     writer.AppendPaddedUnsignedInt<' ', 5>(123);
70     ASSERT_EQ(writer.GetStringView().ToStdString(), "  123");
71   }
72   {
73     base::StringWriter writer(buffer, sizeof(buffer));
74     writer.AppendDouble(123.25);
75     ASSERT_EQ(writer.GetStringView().ToStdString(), "123.250000");
76   }
77   {
78     base::StringWriter writer(buffer, sizeof(buffer));
79     writer.AppendInt(std::numeric_limits<int64_t>::min());
80     ASSERT_EQ(writer.GetStringView().ToStdString(), "-9223372036854775808");
81   }
82   {
83     base::StringWriter writer(buffer, sizeof(buffer));
84     writer.AppendInt(std::numeric_limits<int64_t>::max());
85     ASSERT_EQ(writer.GetStringView().ToStdString(), "9223372036854775807");
86   }
87   {
88     base::StringWriter writer(buffer, sizeof(buffer));
89     writer.AppendUnsignedInt(std::numeric_limits<uint64_t>::max());
90     ASSERT_EQ(writer.GetStringView().ToStdString(), "18446744073709551615");
91   }
92   {
93     base::StringWriter writer(buffer, sizeof(buffer));
94     writer.AppendBool(true);
95     ASSERT_EQ(writer.GetStringView().ToStdString(), "true");
96   }
97   {
98     base::StringWriter writer(buffer, sizeof(buffer));
99     writer.AppendBool(false);
100     ASSERT_EQ(writer.GetStringView().ToStdString(), "false");
101   }
102 
103   constexpr char kTestStr[] = "test";
104   {
105     base::StringWriter writer(buffer, sizeof(buffer));
106     writer.AppendLiteral(kTestStr);
107     ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr);
108   }
109   {
110     base::StringWriter writer(buffer, sizeof(buffer));
111     writer.AppendString(kTestStr, sizeof(kTestStr) - 1);
112     ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr);
113   }
114   {
115     base::StringWriter writer(buffer, sizeof(buffer));
116     writer.AppendString(kTestStr);
117     ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr);
118   }
119   {
120     base::StringWriter writer(buffer, sizeof(buffer));
121     writer.AppendChar('x', sizeof(buffer));
122     ASSERT_EQ(writer.GetStringView().ToStdString(),
123               std::string(sizeof(buffer), 'x').c_str());
124   }
125 }
126 
TEST(StringWriterTest,WriteAllTypes)127 TEST(StringWriterTest, WriteAllTypes) {
128   char buffer[128];
129   base::StringWriter writer(buffer, sizeof(buffer));
130   writer.AppendChar('0');
131   writer.AppendInt(132545);
132   writer.AppendUnsignedInt(523);
133   writer.AppendPaddedInt<'0', 0>(1);
134   writer.AppendPaddedInt<'0', 3>(0);
135   writer.AppendPaddedInt<'0', 1>(1);
136   writer.AppendPaddedInt<'0', 2>(1);
137   writer.AppendPaddedInt<'0', 3>(1);
138   writer.AppendPaddedInt<' ', 5>(123);
139   writer.AppendPaddedUnsignedInt<' ', 5>(456);
140   writer.AppendDouble(123.25);
141   writer.AppendBool(true);
142 
143   constexpr char kTestStr[] = "test";
144   writer.AppendLiteral(kTestStr);
145   writer.AppendString(kTestStr, sizeof(kTestStr) - 1);
146   writer.AppendString(kTestStr);
147 
148   ASSERT_EQ(writer.GetStringView().ToStdString(),
149             "01325455231000101001  123  456123.250000truetesttesttest");
150 }
151 
152 }  // namespace
153 }  // namespace base
154 }  // namespace perfetto
155