SimpleKernel 1.17.0
Loading...
Searching...
No Matches
sk_ctype_test.cpp
Go to the documentation of this file.
1
5#include <gtest/gtest.h>
6
7// Rename functions to avoid conflict with standard library
8#define isalnum sk_isalnum
9#define isalpha sk_isalpha
10#define isblank sk_isblank
11#define iscntrl sk_iscntrl
12#define isdigit sk_isdigit
13#define isgraph sk_isgraph
14#define islower sk_islower
15#define isprint sk_isprint
16#define ispunct sk_ispunct
17#define isspace sk_isspace
18#define isupper sk_isupper
19#define isxdigit sk_isxdigit
20#define tolower sk_tolower
21#define toupper sk_toupper
22
23// Include the source file directly to test the implementation
24#include "../../src/libc/sk_ctype.c"
25
26TEST(SkCtypeTest, IsAlnum) {
27 EXPECT_TRUE(sk_isalnum('a'));
28 EXPECT_TRUE(sk_isalnum('Z'));
29 EXPECT_TRUE(sk_isalnum('0'));
30 EXPECT_TRUE(sk_isalnum('9'));
31 EXPECT_FALSE(sk_isalnum('!'));
32 EXPECT_FALSE(sk_isalnum(' '));
33}
34
35TEST(SkCtypeTest, IsAlpha) {
36 EXPECT_TRUE(sk_isalpha('a'));
37 EXPECT_TRUE(sk_isalpha('Z'));
38 EXPECT_FALSE(sk_isalpha('0'));
39 EXPECT_FALSE(sk_isalpha('!'));
40}
41
42TEST(SkCtypeTest, IsBlank) {
43 EXPECT_TRUE(sk_isblank(' '));
44 EXPECT_TRUE(sk_isblank('\t'));
45 EXPECT_FALSE(sk_isblank('\n'));
46 EXPECT_FALSE(sk_isblank('a'));
47}
48
49TEST(SkCtypeTest, IsCntrl) {
50 EXPECT_TRUE(sk_iscntrl(0));
51 EXPECT_TRUE(sk_iscntrl(31));
52 EXPECT_TRUE(sk_iscntrl(127));
53 EXPECT_FALSE(sk_iscntrl(' '));
54 EXPECT_FALSE(sk_iscntrl('a'));
55}
56
57TEST(SkCtypeTest, IsDigit) {
58 EXPECT_TRUE(sk_isdigit('0'));
59 EXPECT_TRUE(sk_isdigit('9'));
60 EXPECT_FALSE(sk_isdigit('a'));
61 EXPECT_FALSE(sk_isdigit(' '));
62}
63
64TEST(SkCtypeTest, IsGraph) {
65 EXPECT_TRUE(sk_isgraph('!'));
66 EXPECT_TRUE(sk_isgraph('a'));
67 EXPECT_TRUE(sk_isgraph('~'));
68 EXPECT_FALSE(sk_isgraph(' '));
69 EXPECT_FALSE(sk_isgraph('\n'));
70}
71
72TEST(SkCtypeTest, IsLower) {
73 EXPECT_TRUE(sk_islower('a'));
74 EXPECT_TRUE(sk_islower('z'));
75 EXPECT_FALSE(sk_islower('A'));
76 EXPECT_FALSE(sk_islower('0'));
77}
78
79TEST(SkCtypeTest, IsPrint) {
80 EXPECT_TRUE(sk_isprint(' '));
81 EXPECT_TRUE(sk_isprint('a'));
82 EXPECT_TRUE(sk_isprint('~'));
83 EXPECT_FALSE(sk_isprint('\t'));
84 EXPECT_FALSE(sk_isprint(31));
85}
86
87TEST(SkCtypeTest, IsPunct) {
88 EXPECT_TRUE(sk_ispunct('!'));
89 EXPECT_TRUE(sk_ispunct('.'));
90 EXPECT_FALSE(sk_ispunct('a'));
91 EXPECT_FALSE(sk_ispunct('0'));
92 EXPECT_FALSE(sk_ispunct(' '));
93}
94
95TEST(SkCtypeTest, IsSpace) {
96 EXPECT_TRUE(sk_isspace(' '));
97 EXPECT_TRUE(sk_isspace('\f'));
98 EXPECT_TRUE(sk_isspace('\n'));
99 EXPECT_TRUE(sk_isspace('\r'));
100 EXPECT_TRUE(sk_isspace('\t'));
101 EXPECT_TRUE(sk_isspace('\v'));
102 EXPECT_FALSE(sk_isspace('a'));
103}
104
105TEST(SkCtypeTest, IsUpper) {
106 EXPECT_TRUE(sk_isupper('A'));
107 EXPECT_TRUE(sk_isupper('Z'));
108 EXPECT_FALSE(sk_isupper('a'));
109 EXPECT_FALSE(sk_isupper('0'));
110}
111
112TEST(SkCtypeTest, IsXdigit) {
113 EXPECT_TRUE(sk_isxdigit('0'));
114 EXPECT_TRUE(sk_isxdigit('9'));
115 EXPECT_TRUE(sk_isxdigit('a'));
116 EXPECT_TRUE(sk_isxdigit('f'));
117 EXPECT_TRUE(sk_isxdigit('A'));
118 EXPECT_TRUE(sk_isxdigit('F'));
119 EXPECT_FALSE(sk_isxdigit('g'));
120 EXPECT_FALSE(sk_isxdigit('G'));
121}
122
123TEST(SkCtypeTest, ToLower) {
124 EXPECT_EQ(sk_tolower('A'), 'a');
125 EXPECT_EQ(sk_tolower('Z'), 'z');
126 EXPECT_EQ(sk_tolower('a'), 'a');
127 EXPECT_EQ(sk_tolower('0'), '0');
128}
129
130TEST(SkCtypeTest, ToUpper) {
131 EXPECT_EQ(sk_toupper('a'), 'A');
132 EXPECT_EQ(sk_toupper('z'), 'Z');
133 EXPECT_EQ(sk_toupper('A'), 'A');
134 EXPECT_EQ(sk_toupper('0'), '0');
135}
136
137// 边界条件测试
138TEST(SkCtypeTest, BoundaryValues) {
139 // ASCII 边界值
140 EXPECT_FALSE(sk_isalnum(-1));
141 EXPECT_FALSE(sk_isalnum(128));
142 EXPECT_FALSE(sk_isalpha(127));
143}
144
145TEST(SkCtypeTest, ToLowerBoundary) {
146 // 边界值
147 EXPECT_EQ(sk_tolower('A' - 1), 'A' - 1); // '@'
148 EXPECT_EQ(sk_tolower('Z' + 1), 'Z' + 1); // '['
149}
150
151TEST(SkCtypeTest, ToUpperBoundary) {
152 // 边界值
153 EXPECT_EQ(sk_toupper('a' - 1), 'a' - 1); // '`'
154 EXPECT_EQ(sk_toupper('z' + 1), 'z' + 1); // '{'
155}
156
157TEST(SkCtypeTest, AllDigits) {
158 for (char c = '0'; c <= '9'; ++c) {
159 EXPECT_TRUE(sk_isdigit(c));
160 EXPECT_TRUE(sk_isalnum(c));
161 EXPECT_TRUE(sk_isxdigit(c));
162 }
163}
164
165TEST(SkCtypeTest, AllLetters) {
166 for (char c = 'a'; c <= 'z'; ++c) {
167 EXPECT_TRUE(sk_isalpha(c));
168 EXPECT_TRUE(sk_isalnum(c));
169 EXPECT_TRUE(sk_islower(c));
170 EXPECT_FALSE(sk_isupper(c));
171 }
172
173 for (char c = 'A'; c <= 'Z'; ++c) {
174 EXPECT_TRUE(sk_isalpha(c));
175 EXPECT_TRUE(sk_isalnum(c));
176 EXPECT_TRUE(sk_isupper(c));
177 EXPECT_FALSE(sk_islower(c));
178 }
179}
180
181TEST(SkCtypeTest, AllPunctuation) {
182 // 测试常见标点符号
183 const char punct[] = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
184 for (size_t i = 0; i < strlen(punct); ++i) {
185 EXPECT_TRUE(sk_ispunct(punct[i]));
186 EXPECT_FALSE(sk_isalnum(punct[i]));
187 }
188}
189
190TEST(SkCtypeTest, AllWhitespace) {
191 EXPECT_TRUE(sk_isspace(' ')); // space
192 EXPECT_TRUE(sk_isspace('\t')); // tab
193 EXPECT_TRUE(sk_isspace('\n')); // newline
194 EXPECT_TRUE(sk_isspace('\r')); // carriage return
195 EXPECT_TRUE(sk_isspace('\f')); // form feed
196 EXPECT_TRUE(sk_isspace('\v')); // vertical tab
197}
198
199TEST(SkCtypeTest, GraphPrintable) {
200 // isgraph: 可打印但不包括空格
201 // isprint: 可打印包括空格
202 EXPECT_FALSE(sk_isgraph(' '));
203 EXPECT_TRUE(sk_isprint(' '));
204
205 EXPECT_TRUE(sk_isgraph('A'));
206 EXPECT_TRUE(sk_isprint('A'));
207}
208
209TEST(SkCtypeTest, ControlCharacters) {
210 // 测试控制字符 (0-31 和 127)
211 for (int c = 0; c < 32; ++c) {
212 EXPECT_TRUE(sk_iscntrl(c));
213 EXPECT_FALSE(sk_isprint(c));
214 }
215 EXPECT_TRUE(sk_iscntrl(127));
216}
217
218TEST(SkCtypeTest, CaseConversion) {
219 // 测试整个字母表的大小写转换
220 for (char c = 'A'; c <= 'Z'; ++c) {
221 EXPECT_EQ(sk_tolower(c), c + ('a' - 'A'));
222 }
223
224 for (char c = 'a'; c <= 'z'; ++c) {
225 EXPECT_EQ(sk_toupper(c), c - ('a' - 'A'));
226 }
227}
228
229TEST(SkCtypeTest, NonAscii) {
230 // 测试非 ASCII 字符(假设函数处理扩展 ASCII)
231 // 这些应该返回 false 对于大多数函数
232 EXPECT_FALSE(sk_isalpha(128));
233 EXPECT_FALSE(sk_isdigit(200));
234 EXPECT_FALSE(sk_isalnum(255));
235}
TEST(SkCtypeTest, IsAlnum)
#define strlen
#define EXPECT_TRUE(cond, msg)
#define EXPECT_FALSE(cond, msg)
#define EXPECT_EQ(val1, val2, msg)