SimpleKernel 1.17.0
Loading...
Searching...
No Matches
sk_libc_test.cpp File Reference
#include <gtest/gtest.h>
#include "../../src/libc/sk_stdlib.c"
Include dependency graph for sk_libc_test.cpp:

Go to the source code of this file.

Macros

#define atof   sk_atof
 
#define atoi   sk_atoi
 
#define atol   sk_atol
 
#define atoll   sk_atoll
 
#define strtod   sk_strtod
 
#define strtof   sk_strtof
 
#define strtold   sk_strtold
 
#define strtol   sk_strtol
 
#define strtoll   sk_strtoll
 
#define strtoul   sk_strtoul
 
#define strtoull   sk_strtoull
 

Functions

 TEST (SkLibcTest, Atoi)
 
 TEST (SkLibcTest, Atol)
 
 TEST (SkLibcTest, Atoll)
 
 TEST (SkLibcTest, Atof)
 
 TEST (SkLibcTest, Strtol)
 
 TEST (SkLibcTest, Strtoul)
 
 TEST (SkLibcTest, Strtoll)
 
 TEST (SkLibcTest, Strtoull)
 
 TEST (SkLibcTest, Strtod)
 
 TEST (SkLibcTest, Strtof)
 
 TEST (SkLibcTest, AtoiEdgeCases)
 
 TEST (SkLibcTest, AtolEdgeCases)
 
 TEST (SkLibcTest, AtofEdgeCases)
 
 TEST (SkLibcTest, StrtolEdgeCases)
 
 TEST (SkLibcTest, StrtoulEdgeCases)
 
 TEST (SkLibcTest, StrtollEdgeCases)
 
 TEST (SkLibcTest, StrtoullEdgeCases)
 
 TEST (SkLibcTest, StrtodEdgeCases)
 
 TEST (SkLibcTest, StrtofEdgeCases)
 
 TEST (SkLibcTest, BaseDetection)
 
 TEST (SkLibcTest, WhitespaceHandling)
 
 TEST (SkLibcTest, SignHandling)
 
 TEST (SkLibcTest, PartialConversion)
 

Macro Definition Documentation

◆ atof

#define atof   sk_atof

Definition at line 8 of file sk_libc_test.cpp.

◆ atoi

#define atoi   sk_atoi

Definition at line 9 of file sk_libc_test.cpp.

◆ atol

#define atol   sk_atol

Definition at line 10 of file sk_libc_test.cpp.

◆ atoll

#define atoll   sk_atoll

Definition at line 11 of file sk_libc_test.cpp.

◆ strtod

#define strtod   sk_strtod

Definition at line 12 of file sk_libc_test.cpp.

◆ strtof

#define strtof   sk_strtof

Definition at line 13 of file sk_libc_test.cpp.

◆ strtol

#define strtol   sk_strtol

Definition at line 15 of file sk_libc_test.cpp.

◆ strtold

#define strtold   sk_strtold

Definition at line 14 of file sk_libc_test.cpp.

◆ strtoll

#define strtoll   sk_strtoll

Definition at line 16 of file sk_libc_test.cpp.

◆ strtoul

#define strtoul   sk_strtoul

Definition at line 17 of file sk_libc_test.cpp.

◆ strtoull

#define strtoull   sk_strtoull

Definition at line 18 of file sk_libc_test.cpp.

Function Documentation

◆ TEST() [1/23]

TEST ( SkLibcTest  ,
Atof   
)

Definition at line 41 of file sk_libc_test.cpp.

41 {
42 EXPECT_DOUBLE_EQ(sk_atof("3.14"), 3.14);
43 EXPECT_DOUBLE_EQ(sk_atof("-2.5"), -2.5);
44 EXPECT_DOUBLE_EQ(sk_atof("0.0"), 0.0);
45 EXPECT_DOUBLE_EQ(sk_atof("123.456"), 123.456);
46}

◆ TEST() [2/23]

TEST ( SkLibcTest  ,
AtofEdgeCases   
)

Definition at line 128 of file sk_libc_test.cpp.

128 {
129 // 科学计数法(如果支持)
130 EXPECT_DOUBLE_EQ(sk_atof("1e2"), 100.0);
131 EXPECT_DOUBLE_EQ(sk_atof("1.5e-2"), 0.015);
132
133 // 零
134 EXPECT_DOUBLE_EQ(sk_atof("0.0"), 0.0);
135 EXPECT_DOUBLE_EQ(sk_atof("-0.0"), -0.0);
136
137 // 小数点
138 EXPECT_DOUBLE_EQ(sk_atof(".5"), 0.5);
139 EXPECT_DOUBLE_EQ(sk_atof("5."), 5.0);
140}

◆ TEST() [3/23]

TEST ( SkLibcTest  ,
Atoi   
)

Definition at line 22 of file sk_libc_test.cpp.

22 {
23 EXPECT_EQ(sk_atoi("123"), 123);
24 EXPECT_EQ(sk_atoi("-123"), -123);
25 EXPECT_EQ(sk_atoi("+123"), 123);
26 EXPECT_EQ(sk_atoi("0"), 0);
27 EXPECT_EQ(sk_atoi(" 456"), 456); // Leading spaces
28 EXPECT_EQ(sk_atoi("789abc"), 789); // Stop at non-digit
29}
#define EXPECT_EQ(val1, val2, msg)

◆ TEST() [4/23]

TEST ( SkLibcTest  ,
AtoiEdgeCases   
)

Definition at line 109 of file sk_libc_test.cpp.

109 {
110 // 空格和前导零
111 EXPECT_EQ(sk_atoi(" 000123"), 123);
112
113 // 最大/最小值(在 int 范围内)
114 EXPECT_EQ(sk_atoi("2147483647"), 2147483647);
115 EXPECT_EQ(sk_atoi("-2147483648"), -2147483648);
116
117 // 无效输入
118 EXPECT_EQ(sk_atoi("abc"), 0);
119 EXPECT_EQ(sk_atoi(""), 0);
120}

◆ TEST() [5/23]

TEST ( SkLibcTest  ,
Atol   
)

Definition at line 31 of file sk_libc_test.cpp.

31 {
32 EXPECT_EQ(sk_atol("123456789"), 123456789L);
33 EXPECT_EQ(sk_atol("-123456789"), -123456789L);
34}

◆ TEST() [6/23]

TEST ( SkLibcTest  ,
AtolEdgeCases   
)

Definition at line 122 of file sk_libc_test.cpp.

122 {
123 // 长整型范围
124 EXPECT_EQ(sk_atol("9223372036854775807"), 9223372036854775807L);
125 EXPECT_EQ(sk_atol("-9223372036854775808"), -9223372036854775807L - 1);
126}

◆ TEST() [7/23]

TEST ( SkLibcTest  ,
Atoll   
)

Definition at line 36 of file sk_libc_test.cpp.

36 {
37 EXPECT_EQ(sk_atoll("123456789012345"), 123456789012345LL);
38 EXPECT_EQ(sk_atoll("-123456789012345"), -123456789012345LL);
39}

◆ TEST() [8/23]

TEST ( SkLibcTest  ,
BaseDetection   
)

Definition at line 217 of file sk_libc_test.cpp.

217 {
218 char* end;
219
220 // Base 0 应该自动检测
221 EXPECT_EQ(sk_strtol("0x10", &end, 0), 16L);
222 EXPECT_EQ(sk_strtol("010", &end, 0), 8L);
223 EXPECT_EQ(sk_strtol("10", &end, 0), 10L);
224}
void * end[]
内核结束

◆ TEST() [9/23]

TEST ( SkLibcTest  ,
PartialConversion   
)

Definition at line 240 of file sk_libc_test.cpp.

240 {
241 char* end;
242
243 // 部分转换
244 EXPECT_EQ(sk_strtol("123abc", &end, 10), 123L);
245 EXPECT_STREQ(end, "abc");
246
247 EXPECT_EQ(sk_strtol("0xFFGG", &end, 16), 255L);
248 EXPECT_STREQ(end, "GG");
249}

◆ TEST() [10/23]

TEST ( SkLibcTest  ,
SignHandling   
)

Definition at line 232 of file sk_libc_test.cpp.

232 {
233 // 测试符号处理
234 EXPECT_EQ(sk_atoi("+123"), 123);
235 EXPECT_EQ(sk_atoi("-123"), -123);
236 EXPECT_EQ(sk_atoi("++123"), 0); // 双符号应该无效
237 EXPECT_EQ(sk_atoi("--123"), 0);
238}

◆ TEST() [11/23]

TEST ( SkLibcTest  ,
Strtod   
)

Definition at line 95 of file sk_libc_test.cpp.

95 {
96 char* end;
97 EXPECT_DOUBLE_EQ(sk_strtod("3.14159", &end), 3.14159);
98 EXPECT_EQ(*end, '\0');
99 EXPECT_DOUBLE_EQ(sk_strtod(" -123.456abc", &end), -123.456);
100 EXPECT_EQ(*end, 'a');
101}

◆ TEST() [12/23]

TEST ( SkLibcTest  ,
StrtodEdgeCases   
)

Definition at line 194 of file sk_libc_test.cpp.

194 {
195 char* end;
196
197 // 无穷大(如果支持)
198 // EXPECT_TRUE(std::isinf(sk_strtod("inf", &end)));
199
200 // 非常小的数
201 EXPECT_DOUBLE_EQ(sk_strtod("0.000001", &end), 0.000001);
202
203 // 非常大的数
204 EXPECT_DOUBLE_EQ(sk_strtod("123456789.0", &end), 123456789.0);
205}

◆ TEST() [13/23]

TEST ( SkLibcTest  ,
Strtof   
)

Definition at line 103 of file sk_libc_test.cpp.

103 {
104 char* end;
105 EXPECT_FLOAT_EQ(sk_strtof("3.14", &end), 3.14f);
106}

◆ TEST() [14/23]

TEST ( SkLibcTest  ,
StrtofEdgeCases   
)

Definition at line 207 of file sk_libc_test.cpp.

207 {
208 char* end;
209
210 // 零
211 EXPECT_FLOAT_EQ(sk_strtof("0.0", &end), 0.0f);
212
213 // 负数
214 EXPECT_FLOAT_EQ(sk_strtof("-1.5", &end), -1.5f);
215}

◆ TEST() [15/23]

TEST ( SkLibcTest  ,
Strtol   
)

Definition at line 48 of file sk_libc_test.cpp.

48 {
49 char* end;
50 EXPECT_EQ(sk_strtol("123", &end, 10), 123L);
51 EXPECT_EQ(*end, '\0');
52
53 EXPECT_EQ(sk_strtol("-123", &end, 10), -123L);
54 EXPECT_EQ(sk_strtol(" 100", &end, 10), 100L);
55 EXPECT_EQ(*end, '\0');
56
57 // Base 16
58 EXPECT_EQ(sk_strtol("0xABC", &end, 16), 2748L);
59 EXPECT_EQ(*end, '\0');
60 EXPECT_EQ(sk_strtol("-0xabc", &end, 16), -2748L);
61
62 // Auto detect base
63 EXPECT_EQ(sk_strtol("0x10", &end, 0), 16L);
64 EXPECT_EQ(sk_strtol("010", &end, 0), 8L);
65 EXPECT_EQ(sk_strtol("10", &end, 0), 10L);
66
67 // Stop at invalid
68 EXPECT_EQ(sk_strtol("123xyz", &end, 10), 123L);
69 EXPECT_EQ(*end, 'x');
70}

◆ TEST() [16/23]

TEST ( SkLibcTest  ,
StrtolEdgeCases   
)

Definition at line 142 of file sk_libc_test.cpp.

142 {
143 char* end;
144
145 // 空字符串
146 EXPECT_EQ(sk_strtol("", &end, 10), 0L);
147
148 // 只有符号
149 EXPECT_EQ(sk_strtol("+", &end, 10), 0L);
150 EXPECT_EQ(sk_strtol("-", &end, 10), 0L);
151
152 // 二进制数字(注意:标准 strtol 不识别 "0b" 前缀)
153 EXPECT_EQ(sk_strtol("1010", &end, 2), 10L);
154 EXPECT_EQ(sk_strtol("11111111", &end, 2), 255L);
155
156 // 负的十六进制
157 EXPECT_EQ(sk_strtol("-0xFF", &end, 16), -255L);
158}

◆ TEST() [17/23]

TEST ( SkLibcTest  ,
Strtoll   
)

Definition at line 79 of file sk_libc_test.cpp.

79 {
80 char* end;
81 // min for 64bit signed
82 // -9223372036854775808
83 EXPECT_EQ(sk_strtoll("-9223372036854775808", &end, 10),
84 -9223372036854775807LL - 1);
85}

◆ TEST() [18/23]

TEST ( SkLibcTest  ,
StrtollEdgeCases   
)

Definition at line 173 of file sk_libc_test.cpp.

173 {
174 char* end;
175
176 // 零
177 EXPECT_EQ(sk_strtoll("0", &end, 10), 0LL);
178
179 // 负的最大值
180 EXPECT_EQ(sk_strtoll("-9223372036854775807", &end, 10),
181 -9223372036854775807LL);
182}

◆ TEST() [19/23]

TEST ( SkLibcTest  ,
Strtoul   
)

Definition at line 72 of file sk_libc_test.cpp.

72 {
73 char* end;
74 EXPECT_EQ(sk_strtoul("123", &end, 10), 123UL);
75 EXPECT_EQ(sk_strtoul("0xFF", &end, 16), 255UL);
76 EXPECT_EQ(sk_strtoul("11", &end, 2), 3UL);
77}

◆ TEST() [20/23]

TEST ( SkLibcTest  ,
StrtoulEdgeCases   
)

Definition at line 160 of file sk_libc_test.cpp.

160 {
161 char* end;
162
163 // 最大无符号值
164 EXPECT_EQ(sk_strtoul("4294967295", &end, 10), 4294967295UL);
165
166 // 八进制
167 EXPECT_EQ(sk_strtoul("0777", &end, 8), 511UL);
168
169 // 二进制
170 EXPECT_EQ(sk_strtoul("1111", &end, 2), 15UL);
171}

◆ TEST() [21/23]

TEST ( SkLibcTest  ,
Strtoull   
)

Definition at line 87 of file sk_libc_test.cpp.

87 {
88 char* end;
89 // max for 64bit unsigned
90 // 18446744073709551615
91 EXPECT_EQ(sk_strtoull("18446744073709551615", &end, 10),
92 18446744073709551615ULL);
93}

◆ TEST() [22/23]

TEST ( SkLibcTest  ,
StrtoullEdgeCases   
)

Definition at line 184 of file sk_libc_test.cpp.

184 {
185 char* end;
186
187 // 零
188 EXPECT_EQ(sk_strtoull("0", &end, 10), 0ULL);
189
190 // 十六进制最大值
191 EXPECT_EQ(sk_strtoull("FFFFFFFFFFFFFFFF", &end, 16), 18446744073709551615ULL);
192}

◆ TEST() [23/23]

TEST ( SkLibcTest  ,
WhitespaceHandling   
)

Definition at line 226 of file sk_libc_test.cpp.

226 {
227 // 测试各种空白字符
228 EXPECT_EQ(sk_atoi(" \t\n\r123"), 123);
229 EXPECT_EQ(sk_atoi("\t\t\t456"), 456);
230}