abfcc2cdffcf23f0d8427cb5d2994f80ff70ef75
[iec.git] / src / type3_AndroidCloud / anbox-master / external / cpu_features / test / string_view_test.cc
1 // Copyright 2017 Google Inc.
2 //
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 #include "internal/string_view.h"
16
17 #include "gtest/gtest.h"
18
19 namespace cpu_features {
20
21 bool operator==(const StringView& a, const StringView& b) {
22   return CpuFeatures_StringView_IsEquals(a, b);
23 }
24
25 namespace {
26
27 TEST(StringViewTest, Empty) {
28   EXPECT_EQ(kEmptyStringView.ptr, nullptr);
29   EXPECT_EQ(kEmptyStringView.size, 0);
30 }
31
32 TEST(StringViewTest, Build) {
33   const auto view = str("test");
34   EXPECT_EQ(view.ptr[0], 't');
35   EXPECT_EQ(view.size, 4);
36 }
37
38 TEST(StringViewTest, CpuFeatures_StringView_IndexOfChar) {
39   // Found.
40   EXPECT_EQ(CpuFeatures_StringView_IndexOfChar(str("test"), 'e'), 1);
41   // Not found.
42   EXPECT_EQ(CpuFeatures_StringView_IndexOfChar(str("test"), 'z'), -1);
43   // Empty.
44   EXPECT_EQ(CpuFeatures_StringView_IndexOfChar(kEmptyStringView, 'z'), -1);
45 }
46
47 TEST(StringViewTest, CpuFeatures_StringView_IndexOf) {
48   // Found.
49   EXPECT_EQ(CpuFeatures_StringView_IndexOf(str("test"), str("es")), 1);
50   // Not found.
51   EXPECT_EQ(CpuFeatures_StringView_IndexOf(str("test"), str("aa")), -1);
52   // Empty.
53   EXPECT_EQ(CpuFeatures_StringView_IndexOf(kEmptyStringView, str("aa")), -1);
54   EXPECT_EQ(CpuFeatures_StringView_IndexOf(str("aa"), kEmptyStringView), -1);
55 }
56
57 TEST(StringViewTest, CpuFeatures_StringView_StartsWith) {
58   EXPECT_TRUE(CpuFeatures_StringView_StartsWith(str("test"), str("te")));
59   EXPECT_FALSE(CpuFeatures_StringView_StartsWith(str("test"), str("")));
60   EXPECT_FALSE(
61       CpuFeatures_StringView_StartsWith(str("test"), kEmptyStringView));
62   EXPECT_FALSE(
63       CpuFeatures_StringView_StartsWith(kEmptyStringView, str("test")));
64 }
65
66 TEST(StringViewTest, CpuFeatures_StringView_IsEquals) {
67   EXPECT_TRUE(
68       CpuFeatures_StringView_IsEquals(kEmptyStringView, kEmptyStringView));
69   EXPECT_TRUE(CpuFeatures_StringView_IsEquals(kEmptyStringView, str("")));
70   EXPECT_TRUE(CpuFeatures_StringView_IsEquals(str(""), kEmptyStringView));
71   EXPECT_TRUE(CpuFeatures_StringView_IsEquals(str("a"), str("a")));
72   EXPECT_FALSE(CpuFeatures_StringView_IsEquals(str("a"), str("b")));
73   EXPECT_FALSE(CpuFeatures_StringView_IsEquals(str("a"), kEmptyStringView));
74   EXPECT_FALSE(CpuFeatures_StringView_IsEquals(kEmptyStringView, str("a")));
75 }
76
77 TEST(StringViewTest, CpuFeatures_StringView_PopFront) {
78   EXPECT_EQ(CpuFeatures_StringView_PopFront(str("test"), 2), str("st"));
79   EXPECT_EQ(CpuFeatures_StringView_PopFront(str("test"), 0), str("test"));
80   EXPECT_EQ(CpuFeatures_StringView_PopFront(str("test"), 4), str(""));
81   EXPECT_EQ(CpuFeatures_StringView_PopFront(str("test"), 100), str(""));
82 }
83
84 TEST(StringViewTest, CpuFeatures_StringView_ParsePositiveNumber) {
85   EXPECT_EQ(CpuFeatures_StringView_ParsePositiveNumber(str("42")), 42);
86   EXPECT_EQ(CpuFeatures_StringView_ParsePositiveNumber(str("0x2a")), 42);
87   EXPECT_EQ(CpuFeatures_StringView_ParsePositiveNumber(str("0x2A")), 42);
88
89   EXPECT_EQ(CpuFeatures_StringView_ParsePositiveNumber(str("-0x2A")), -1);
90   EXPECT_EQ(CpuFeatures_StringView_ParsePositiveNumber(str("abc")), -1);
91   EXPECT_EQ(CpuFeatures_StringView_ParsePositiveNumber(str("")), -1);
92 }
93
94 TEST(StringViewTest, CpuFeatures_StringView_CopyString) {
95   char buf[4];
96   buf[0] = 'X';
97
98   // Empty
99   CpuFeatures_StringView_CopyString(str(""), buf, sizeof(buf));
100   EXPECT_STREQ(buf, "");
101
102   // Less
103   CpuFeatures_StringView_CopyString(str("a"), buf, sizeof(buf));
104   EXPECT_STREQ(buf, "a");
105
106   // exact
107   CpuFeatures_StringView_CopyString(str("abc"), buf, sizeof(buf));
108   EXPECT_STREQ(buf, "abc");
109
110   // More
111   CpuFeatures_StringView_CopyString(str("abcd"), buf, sizeof(buf));
112   EXPECT_STREQ(buf, "abc");
113 }
114
115 TEST(StringViewTest, CpuFeatures_StringView_HasWord) {
116   // Find flags at beginning, middle and end.
117   EXPECT_TRUE(
118       CpuFeatures_StringView_HasWord(str("first middle last"), "first"));
119   EXPECT_TRUE(
120       CpuFeatures_StringView_HasWord(str("first middle last"), "middle"));
121   EXPECT_TRUE(CpuFeatures_StringView_HasWord(str("first middle last"), "last"));
122   // Do not match partial flags
123   EXPECT_FALSE(
124       CpuFeatures_StringView_HasWord(str("first middle last"), "irst"));
125   EXPECT_FALSE(CpuFeatures_StringView_HasWord(str("first middle last"), "mid"));
126   EXPECT_FALSE(CpuFeatures_StringView_HasWord(str("first middle last"), "las"));
127 }
128
129 TEST(StringViewTest, CpuFeatures_StringView_GetAttributeKeyValue) {
130   const StringView line = str(" key :   first middle last   ");
131   StringView key, value;
132   EXPECT_TRUE(CpuFeatures_StringView_GetAttributeKeyValue(line, &key, &value));
133   EXPECT_EQ(key, str("key"));
134   EXPECT_EQ(value, str("first middle last"));
135 }
136
137 TEST(StringViewTest, FailingGetAttributeKeyValue) {
138   const StringView line = str("key  first middle last");
139   StringView key, value;
140   EXPECT_FALSE(CpuFeatures_StringView_GetAttributeKeyValue(line, &key, &value));
141 }
142
143 }  // namespace
144 }  // namespace cpu_features