1 // Copyright 2017 Google Inc.
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
7 // http://www.apache.org/licenses/LICENSE-2.0
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.
15 #include "internal/string_view.h"
17 #include "gtest/gtest.h"
19 namespace cpu_features {
21 bool operator==(const StringView& a, const StringView& b) {
22 return CpuFeatures_StringView_IsEquals(a, b);
27 TEST(StringViewTest, Empty) {
28 EXPECT_EQ(kEmptyStringView.ptr, nullptr);
29 EXPECT_EQ(kEmptyStringView.size, 0);
32 TEST(StringViewTest, Build) {
33 const auto view = str("test");
34 EXPECT_EQ(view.ptr[0], 't');
35 EXPECT_EQ(view.size, 4);
38 TEST(StringViewTest, CpuFeatures_StringView_IndexOfChar) {
40 EXPECT_EQ(CpuFeatures_StringView_IndexOfChar(str("test"), 'e'), 1);
42 EXPECT_EQ(CpuFeatures_StringView_IndexOfChar(str("test"), 'z'), -1);
44 EXPECT_EQ(CpuFeatures_StringView_IndexOfChar(kEmptyStringView, 'z'), -1);
47 TEST(StringViewTest, CpuFeatures_StringView_IndexOf) {
49 EXPECT_EQ(CpuFeatures_StringView_IndexOf(str("test"), str("es")), 1);
51 EXPECT_EQ(CpuFeatures_StringView_IndexOf(str("test"), str("aa")), -1);
53 EXPECT_EQ(CpuFeatures_StringView_IndexOf(kEmptyStringView, str("aa")), -1);
54 EXPECT_EQ(CpuFeatures_StringView_IndexOf(str("aa"), kEmptyStringView), -1);
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("")));
61 CpuFeatures_StringView_StartsWith(str("test"), kEmptyStringView));
63 CpuFeatures_StringView_StartsWith(kEmptyStringView, str("test")));
66 TEST(StringViewTest, CpuFeatures_StringView_IsEquals) {
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")));
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(""));
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);
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);
94 TEST(StringViewTest, CpuFeatures_StringView_CopyString) {
99 CpuFeatures_StringView_CopyString(str(""), buf, sizeof(buf));
100 EXPECT_STREQ(buf, "");
103 CpuFeatures_StringView_CopyString(str("a"), buf, sizeof(buf));
104 EXPECT_STREQ(buf, "a");
107 CpuFeatures_StringView_CopyString(str("abc"), buf, sizeof(buf));
108 EXPECT_STREQ(buf, "abc");
111 CpuFeatures_StringView_CopyString(str("abcd"), buf, sizeof(buf));
112 EXPECT_STREQ(buf, "abc");
115 TEST(StringViewTest, CpuFeatures_StringView_HasWord) {
116 // Find flags at beginning, middle and end.
118 CpuFeatures_StringView_HasWord(str("first middle last"), "first"));
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
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"));
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"));
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));
144 } // namespace cpu_features