xref: /aosp_15_r20/art/libartbase/base/utils_test.cc (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2011 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker #include "utils.h"
18*795d594fSAndroid Build Coastguard Worker #include "stl_util.h"
19*795d594fSAndroid Build Coastguard Worker 
20*795d594fSAndroid Build Coastguard Worker #include "gmock/gmock.h"
21*795d594fSAndroid Build Coastguard Worker #include "gtest/gtest.h"
22*795d594fSAndroid Build Coastguard Worker 
23*795d594fSAndroid Build Coastguard Worker namespace art {
24*795d594fSAndroid Build Coastguard Worker 
25*795d594fSAndroid Build Coastguard Worker class UtilsTest : public testing::Test {};
26*795d594fSAndroid Build Coastguard Worker 
TEST_F(UtilsTest,PrettySize)27*795d594fSAndroid Build Coastguard Worker TEST_F(UtilsTest, PrettySize) {
28*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("1024MB", PrettySize(1 * GB));
29*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("2048MB", PrettySize(2 * GB));
30*795d594fSAndroid Build Coastguard Worker   if (sizeof(size_t) > sizeof(uint32_t)) {
31*795d594fSAndroid Build Coastguard Worker     EXPECT_EQ("100GB", PrettySize(100 * GB));
32*795d594fSAndroid Build Coastguard Worker   }
33*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("1024KB", PrettySize(1 * MB));
34*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("10MB", PrettySize(10 * MB));
35*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("100MB", PrettySize(100 * MB));
36*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("1024B", PrettySize(1 * KB));
37*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("10KB", PrettySize(10 * KB));
38*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("100KB", PrettySize(100 * KB));
39*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("0B", PrettySize(0));
40*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("1B", PrettySize(1));
41*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("10B", PrettySize(10));
42*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("100B", PrettySize(100));
43*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("512B", PrettySize(512));
44*795d594fSAndroid Build Coastguard Worker }
45*795d594fSAndroid Build Coastguard Worker 
Split(const char * arr,char s,std::vector<std::string_view> * sv)46*795d594fSAndroid Build Coastguard Worker void Split(const char* arr, char s, std::vector<std::string_view>* sv) {
47*795d594fSAndroid Build Coastguard Worker   Split<std::string_view>(std::string_view(arr), s, sv);
48*795d594fSAndroid Build Coastguard Worker }
49*795d594fSAndroid Build Coastguard Worker 
TEST_F(UtilsTest,Split)50*795d594fSAndroid Build Coastguard Worker TEST_F(UtilsTest, Split) {
51*795d594fSAndroid Build Coastguard Worker   std::vector<std::string_view> actual;
52*795d594fSAndroid Build Coastguard Worker   std::vector<std::string_view> expected;
53*795d594fSAndroid Build Coastguard Worker 
54*795d594fSAndroid Build Coastguard Worker   expected.clear();
55*795d594fSAndroid Build Coastguard Worker 
56*795d594fSAndroid Build Coastguard Worker   actual.clear();
57*795d594fSAndroid Build Coastguard Worker   Split("", ':', &actual);
58*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
59*795d594fSAndroid Build Coastguard Worker 
60*795d594fSAndroid Build Coastguard Worker   actual.clear();
61*795d594fSAndroid Build Coastguard Worker   Split(":", ':', &actual);
62*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
63*795d594fSAndroid Build Coastguard Worker 
64*795d594fSAndroid Build Coastguard Worker   expected.clear();
65*795d594fSAndroid Build Coastguard Worker   expected.push_back("foo");
66*795d594fSAndroid Build Coastguard Worker 
67*795d594fSAndroid Build Coastguard Worker   actual.clear();
68*795d594fSAndroid Build Coastguard Worker   Split(":foo", ':', &actual);
69*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
70*795d594fSAndroid Build Coastguard Worker 
71*795d594fSAndroid Build Coastguard Worker   actual.clear();
72*795d594fSAndroid Build Coastguard Worker   Split("foo:", ':', &actual);
73*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
74*795d594fSAndroid Build Coastguard Worker 
75*795d594fSAndroid Build Coastguard Worker   actual.clear();
76*795d594fSAndroid Build Coastguard Worker   Split(":foo:", ':', &actual);
77*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
78*795d594fSAndroid Build Coastguard Worker 
79*795d594fSAndroid Build Coastguard Worker   expected.push_back("bar");
80*795d594fSAndroid Build Coastguard Worker 
81*795d594fSAndroid Build Coastguard Worker   actual.clear();
82*795d594fSAndroid Build Coastguard Worker   Split("foo:bar", ':', &actual);
83*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
84*795d594fSAndroid Build Coastguard Worker 
85*795d594fSAndroid Build Coastguard Worker   actual.clear();
86*795d594fSAndroid Build Coastguard Worker   Split(":foo:bar", ':', &actual);
87*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
88*795d594fSAndroid Build Coastguard Worker 
89*795d594fSAndroid Build Coastguard Worker   actual.clear();
90*795d594fSAndroid Build Coastguard Worker   Split("foo:bar:", ':', &actual);
91*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
92*795d594fSAndroid Build Coastguard Worker 
93*795d594fSAndroid Build Coastguard Worker   actual.clear();
94*795d594fSAndroid Build Coastguard Worker   Split(":foo:bar:", ':', &actual);
95*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
96*795d594fSAndroid Build Coastguard Worker 
97*795d594fSAndroid Build Coastguard Worker   expected.push_back("baz");
98*795d594fSAndroid Build Coastguard Worker 
99*795d594fSAndroid Build Coastguard Worker   actual.clear();
100*795d594fSAndroid Build Coastguard Worker   Split("foo:bar:baz", ':', &actual);
101*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
102*795d594fSAndroid Build Coastguard Worker 
103*795d594fSAndroid Build Coastguard Worker   actual.clear();
104*795d594fSAndroid Build Coastguard Worker   Split(":foo:bar:baz", ':', &actual);
105*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
106*795d594fSAndroid Build Coastguard Worker 
107*795d594fSAndroid Build Coastguard Worker   actual.clear();
108*795d594fSAndroid Build Coastguard Worker   Split("foo:bar:baz:", ':', &actual);
109*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
110*795d594fSAndroid Build Coastguard Worker 
111*795d594fSAndroid Build Coastguard Worker   actual.clear();
112*795d594fSAndroid Build Coastguard Worker   Split(":foo:bar:baz:", ':', &actual);
113*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(expected, actual);
114*795d594fSAndroid Build Coastguard Worker }
115*795d594fSAndroid Build Coastguard Worker 
TEST_F(UtilsTest,GetProcessStatus)116*795d594fSAndroid Build Coastguard Worker TEST_F(UtilsTest, GetProcessStatus) {
117*795d594fSAndroid Build Coastguard Worker   EXPECT_THAT(GetProcessStatus("Name"),
118*795d594fSAndroid Build Coastguard Worker               testing::AnyOf(
119*795d594fSAndroid Build Coastguard Worker                   "art_libartbase_",    // Test binary name: `art_libartbase_test`.
120*795d594fSAndroid Build Coastguard Worker                   "art_standalone_"));  // Test binary name: `art_standalone_libartbase_test`.
121*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("R (running)", GetProcessStatus("State"));
122*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("<unknown>", GetProcessStatus("tate"));
123*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("<unknown>", GetProcessStatus("e"));
124*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ("<unknown>", GetProcessStatus("InvalidFieldName"));
125*795d594fSAndroid Build Coastguard Worker }
126*795d594fSAndroid Build Coastguard Worker 
TEST_F(UtilsTest,StringSplit)127*795d594fSAndroid Build Coastguard Worker TEST_F(UtilsTest, StringSplit) {
128*795d594fSAndroid Build Coastguard Worker   auto range = SplitString("[ab[c[[d[e[", '[');
129*795d594fSAndroid Build Coastguard Worker   auto it = range.begin();
130*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
131*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "");
132*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
133*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "ab");
134*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
135*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "c");
136*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
137*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "");
138*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
139*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "d");
140*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
141*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "e");
142*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
143*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "");
144*795d594fSAndroid Build Coastguard Worker   EXPECT_TRUE(it == range.end());
145*795d594fSAndroid Build Coastguard Worker }
146*795d594fSAndroid Build Coastguard Worker 
TEST_F(UtilsTest,StringSplit2)147*795d594fSAndroid Build Coastguard Worker TEST_F(UtilsTest, StringSplit2) {
148*795d594fSAndroid Build Coastguard Worker   auto range = SplitString("ab[c[[d[e", '[');
149*795d594fSAndroid Build Coastguard Worker   auto it = range.begin();
150*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
151*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "ab");
152*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
153*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "c");
154*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
155*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "");
156*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
157*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "d");
158*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
159*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "e");
160*795d594fSAndroid Build Coastguard Worker   EXPECT_TRUE(it == range.end());
161*795d594fSAndroid Build Coastguard Worker }
162*795d594fSAndroid Build Coastguard Worker 
TEST_F(UtilsTest,StringSplit3)163*795d594fSAndroid Build Coastguard Worker TEST_F(UtilsTest, StringSplit3) {
164*795d594fSAndroid Build Coastguard Worker   auto range = SplitString("", '[');
165*795d594fSAndroid Build Coastguard Worker   auto it = range.begin();
166*795d594fSAndroid Build Coastguard Worker   EXPECT_FALSE(it == range.end());
167*795d594fSAndroid Build Coastguard Worker   EXPECT_EQ(*it++, "");
168*795d594fSAndroid Build Coastguard Worker   EXPECT_TRUE(it == range.end());
169*795d594fSAndroid Build Coastguard Worker }
170*795d594fSAndroid Build Coastguard Worker 
171*795d594fSAndroid Build Coastguard Worker }  // namespace art
172