1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
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 
16 #include <stdio.h>
17 
18 #include "IoTest.h"
19 #include <securec.h>
20 
21 using namespace testing::ext;
22 
23  /**
24  * @tc.number SUB_KERNEL_IO_SPRINTF_0100
25  * @tc.name   sprintf basic function test of int with boundary value
26  * @tc.desc   [C- SOFTWARE -0200]
27  */
HWTEST_F(IoTest, testSprintfIntBoundary, Function | MediumTest | Level1)28 HWTEST_F(IoTest, testSprintfIntBoundary, Function | MediumTest | Level1)
29 {
30     char str[100] = {0};
31     int ret = sprintf(str, "%d", -2147483648);
32     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
33     EXPECT_STREQ(str, "-2147483648");
34 
35     ret = sprintf(str, "%d", 2147483647);
36     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
37     EXPECT_STREQ(str, "2147483647");
38 
39     ret = sprintf(str, "%i", -2147483648);
40     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
41     EXPECT_STREQ(str, "-2147483648");
42 
43     ret = sprintf(str, "%i", 2147483647);
44     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
45     EXPECT_STREQ(str, "2147483647");
46 
47     ret = sprintf(str, "%u", 0);
48     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
49     EXPECT_STREQ(str, "0");
50 
51     ret = sprintf(str, "%u", 4294967295);
52     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
53     EXPECT_STREQ(str, "4294967295");
54 }
55 
56  /**
57  * @tc.number SUB_KERNEL_IO_SPRINTF_0200
58  * @tc.name   sprintf basic function test of long int with boundary value
59  * @tc.desc   [C- SOFTWARE -0200]
60  */
HWTEST_F(IoTest, testSprintfIntLdBoundary, Function | MediumTest | Level1)61 HWTEST_F(IoTest, testSprintfIntLdBoundary, Function | MediumTest | Level1)
62 {
63     char str[100] = {0};
64     int ret = sprintf(str, "%ld", -2147483648); // 2^31-1
65     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
66     EXPECT_STREQ(str, "-2147483648");
67 
68     ret = sprintf(str, "%ld", 2147483647);
69     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
70     EXPECT_STREQ(str, "2147483647");
71 
72     ret = sprintf(str, "%li", -2147483648);
73     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
74     EXPECT_STREQ(str, "-2147483648");
75 
76     ret = sprintf(str, "%li", 2147483647);
77     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
78     EXPECT_STREQ(str, "2147483647");
79 
80     ret = sprintf(str, "%lu", 0);
81     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
82     EXPECT_STREQ(str, "0");
83 
84     ret = sprintf(str, "%lu", 4294967295);
85     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
86     EXPECT_STREQ(str, "4294967295");
87 }
88 
89  /**
90  * @tc.number SUB_KERNEL_IO_SPRINTF_0300
91  * @tc.name   sprintf basic function test of long long int with boundary value
92  * @tc.desc   [C- SOFTWARE -0200]
93  */
HWTEST_F(IoTest, testSprintfIntLldBoundary, Function | MediumTest | Level1)94 HWTEST_F(IoTest, testSprintfIntLldBoundary, Function | MediumTest | Level1)
95 {
96     char str[100] = {0};
97     int ret = sprintf(str, "%lld", -9223372036854775807LL); // 2^63-1
98     EXPECT_EQ(ret, 20) << "> sprintf fail, errno = " << errno;
99     EXPECT_STREQ(str, "-9223372036854775807");
100 
101     ret = sprintf(str, "%lld", 9223372036854775807);
102     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
103     EXPECT_STREQ(str, "9223372036854775807");
104 
105     ret = sprintf(str, "%lli", -9223372036854775807);
106     EXPECT_EQ(ret, 20) << "> sprintf fail, errno = " << errno;
107     EXPECT_STREQ(str, "-9223372036854775807");
108 
109     ret = sprintf(str, "%lli", 9223372036854775807);
110     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
111     EXPECT_STREQ(str, "9223372036854775807");
112 
113     ret = sprintf(str, "%llu", (unsigned long long)0);
114     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
115     EXPECT_STREQ(str, "0");
116 
117     ret = sprintf(str, "%llu", 18446744073709551615llu);
118     EXPECT_EQ(ret, 20) << "> sprintf fail, errno = " << errno;
119     EXPECT_STREQ(str, "18446744073709551615");
120 }
121 
122  /**
123  * @tc.number SUB_KERNEL_IO_SPRINTF_0400
124  * @tc.name   sprintf basic function test of intmax_t and uintmax_t with boundary value
125  * @tc.desc   [C- SOFTWARE -0200]
126  */
HWTEST_F(IoTest, testSprintfIntMaxTBoundary, Function | MediumTest | Level1)127 HWTEST_F(IoTest, testSprintfIntMaxTBoundary, Function | MediumTest | Level1)
128 {
129     char str[100] = {0};
130     int ret = sprintf(str, "%jd", -9223372036854775807LL);
131     EXPECT_EQ(ret, 20) << "> sprintf fail, errno = " << errno;
132     EXPECT_STREQ(str, "-9223372036854775807");
133 
134     ret = sprintf(str, "%jd", 9223372036854775807LL);
135     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
136     EXPECT_STREQ(str, "9223372036854775807");
137 
138     ret = sprintf(str, "%jd", 0ULL);
139     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
140     EXPECT_STREQ(str, "0");
141 
142     ret = sprintf(str, "%jd", 18446744073709551615ULL);
143     EXPECT_EQ(ret, 2) << "> sprintf fail, errno = " << errno;
144     EXPECT_STREQ(str, "-1");
145 }
146 
147  /**
148  * @tc.number SUB_KERNEL_IO_SPRINTF_0500
149  * @tc.name   sprintf basic function test of ptrdiff_t with boundary value
150  * @tc.desc   [C- SOFTWARE -0200]
151  */
HWTEST_F(IoTest, testSprintfPtrdiffTBoundary, Function | MediumTest | Level1)152 HWTEST_F(IoTest, testSprintfPtrdiffTBoundary, Function | MediumTest | Level1)
153 {
154     char str[50] = {0};
155     int ret = sprintf(str, "%td", 2147483647);
156     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
157     EXPECT_STREQ(str, "2147483647");
158 
159     ret = sprintf(str, "%td", -2147483648);
160     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
161     EXPECT_STREQ(str, "-2147483648");
162 }
163 
164  /**
165  * @tc.number SUB_KERNEL_IO_SPRINTF_0600
166  * @tc.name   sprintf basic function test of size_t with boundary value
167  * @tc.desc   [C- SOFTWARE -0200]
168  */
HWTEST_F(IoTest, testSprintfSizeTBoundary, Function | MediumTest | Level1)169 HWTEST_F(IoTest, testSprintfSizeTBoundary, Function | MediumTest | Level1)
170 {
171     char str[50] = {0};
172     int ret = sprintf(str, "%zd", 2147483647);
173     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
174     EXPECT_STREQ(str, "2147483647");
175 
176     ret = sprintf(str, "%zd", -2147483648);
177     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
178     EXPECT_STREQ(str, "-2147483648");
179 }
180 
181  /**
182  * @tc.number SUB_KERNEL_IO_SPRINTF_0700
183  * @tc.name   sprintf basic function test of signed char and short int with boundary value
184  * @tc.desc   [C- SOFTWARE -0200]
185  */
HWTEST_F(IoTest, testSprintfIntHhdBoundary, Function | MediumTest | Level1)186 HWTEST_F(IoTest, testSprintfIntHhdBoundary, Function | MediumTest | Level1)
187 {
188     char str[50] = {0};
189     int ret = sprintf(str, "%hd %hhd %hu %hhu", 32767, 127, 65535, 255);
190     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
191     EXPECT_STREQ(str, "32767 127 65535 255");
192 
193     ret = sprintf(str, "%hd %hhd %hu %hhu", -32768, -128, 0, 0);
194     EXPECT_EQ(ret, 15) << "> sprintf fail, errno = " << errno;
195     EXPECT_STREQ(str, "-32768 -128 0 0");
196 }
197 
198  /**
199  * @tc.number SUB_KERNEL_IO_SPRINTF_0800
200  * @tc.name   sprintf basic function test of align right
201  * @tc.desc   [C- SOFTWARE -0200]
202  */
HWTEST_F(IoTest, testSprintfAlighRight, Function | MediumTest | Level1)203 HWTEST_F(IoTest, testSprintfAlighRight, Function | MediumTest | Level1)
204 {
205     char str[50] = {0};
206     int ret = sprintf(str, "%5d %5d", 1, -1);
207     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
208     EXPECT_STREQ(str, "    1    -1");
209 
210     ret = sprintf(str, "%5i %5i", 1, -1);
211     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
212     EXPECT_STREQ(str, "    1    -1");
213 
214     ret = sprintf(str, "%5u %5u", 1, 0);
215     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
216     EXPECT_STREQ(str, "    1     0");
217 
218     ret = sprintf(str, "% 5d % 5d", 1, -1);
219     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
220     EXPECT_STREQ(str, "    1    -1");
221 
222     ret = sprintf(str, "% 5i % 5i", 1, -1);
223     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
224     EXPECT_STREQ(str, "    1    -1");
225 
226     ret = sprintf(str, "% 5u % 5u", 1, 0);
227     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
228     EXPECT_STREQ(str, "    1     0");
229 
230     ret = sprintf(str, "%+5d %+5d", 1, -1);
231     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
232     EXPECT_STREQ(str, "   +1    -1");
233 
234     ret = sprintf(str, "%+5i %+5i", 1, -1);
235     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
236     EXPECT_STREQ(str, "   +1    -1");
237 
238     ret = sprintf(str, "%+5u %+5u", 1, 0);
239     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
240     EXPECT_STREQ(str, "    1     0");
241 }
242 
243  /**
244  * @tc.number SUB_KERNEL_IO_SPRINTF_0900
245  * @tc.name   sprintf basic function test of align left
246  * @tc.desc   [C- SOFTWARE -0200]
247  */
HWTEST_F(IoTest, testSprintfAlighLeft, Function | MediumTest | Level1)248 HWTEST_F(IoTest, testSprintfAlighLeft, Function | MediumTest | Level1)
249 {
250     char str[50] = {0};
251     int ret = sprintf(str, "%-5d %-5d", 1, -1);
252     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
253     EXPECT_STREQ(str, "1     -1   ");
254 
255     ret = sprintf(str, "%-5i %-5i", 1, -1);
256     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
257     EXPECT_STREQ(str, "1     -1   ");
258 
259     ret = sprintf(str, "%-5u %-5u", 1, 0);
260     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
261     EXPECT_STREQ(str, "1     0    ");
262 
263     ret = sprintf(str, "%0-5d %0-5d", 1, -1);
264     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
265     EXPECT_STREQ(str, "1     -1   ");
266 
267     ret = sprintf(str, "%0-5i %0-5i", 1, -1);
268     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
269     EXPECT_STREQ(str, "1     -1   ");
270 
271     ret = sprintf(str, "%0-5u %0-5u", 1, 0);
272     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
273     EXPECT_STREQ(str, "1     0    ");
274 }
275 
276  /**
277  * @tc.number SUB_KERNEL_IO_SPRINTF_1000
278  * @tc.name   sprintf basic function test of other format
279  * @tc.desc   [C- SOFTWARE -0200]
280  */
HWTEST_F(IoTest, testSprintfOtherFormat, Function | MediumTest | Level1)281 HWTEST_F(IoTest, testSprintfOtherFormat, Function | MediumTest | Level1)
282 {
283     char str[50] = {0};
284     int ret = sprintf(str, "%.5d %.5d", 1, -1);
285     EXPECT_EQ(ret, 12) << "> sprintf fail, errno = " << errno;
286     EXPECT_STREQ(str, "00001 -00001");
287 
288     ret = sprintf(str, "%.5i %.5i", 1, -1);
289     EXPECT_EQ(ret, 12) << "> sprintf fail, errno = " << errno;
290     EXPECT_STREQ(str, "00001 -00001");
291 
292     ret = sprintf(str, "%.5u %.5u", 1, 0);
293     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
294     EXPECT_STREQ(str, "00001 00000");
295 
296     ret = sprintf(str, "%#5d %#5d", 1, -1);
297     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
298     EXPECT_STREQ(str, "    1    -1");
299 
300     ret = sprintf(str, "%#5i %#5i", 1, -1);
301     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
302     EXPECT_STREQ(str, "    1    -1");
303 
304     ret = sprintf(str, "%8.5d %8.5d", 1, -1);
305     EXPECT_EQ(ret, 17) << "> sprintf fail, errno = " << errno;
306     EXPECT_STREQ(str, "   00001   -00001");
307 
308     ret = sprintf(str, "%#05d %#05d", 1, -1);
309     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
310     EXPECT_STREQ(str, "00001 -0001");
311 
312     ret = sprintf(str, "%#05i %#05i", 1, -1);
313     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
314     EXPECT_STREQ(str, "00001 -0001");
315 
316     ret = sprintf(str, "%8.5i %8.5i", 1, -1);
317     EXPECT_EQ(ret, 17) << "> sprintf fail, errno = " << errno;
318     EXPECT_STREQ(str, "   00001   -00001");
319 
320     ret = sprintf(str, "%#5u %#5u", 1, 0);
321     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
322     EXPECT_STREQ(str, "    1     0");
323 
324     ret = sprintf(str, "%#05u %#05u", 1, 0);
325     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
326     EXPECT_STREQ(str, "00001 00000");
327 
328     ret = sprintf(str, "%8.5u %8.5u", 1, 0);
329     EXPECT_EQ(ret, 17) << "> sprintf fail, errno = " << errno;
330     EXPECT_STREQ(str, "   00001    00000");
331 }
332 
333  /**
334  * @tc.number SUB_KERNEL_IO_SPRINTF_1100
335  * @tc.name   sprintf basic function test of octal
336  * @tc.desc   [C- SOFTWARE -0200]
337  */
HWTEST_F(IoTest, testSprintfOctal, Function | MediumTest | Level1)338 HWTEST_F(IoTest, testSprintfOctal, Function | MediumTest | Level1)
339 {
340     char str[50] = {0};
341     int ret = sprintf(str, "%o", 4294967295);
342     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
343     EXPECT_STREQ(str, "37777777777");
344 
345     ret = sprintf(str, "%o", 0);
346     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
347     EXPECT_STREQ(str, "0");
348 
349     ret = sprintf(str, "%o", -1);
350     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
351     EXPECT_STREQ(str, "37777777777");
352 
353     ret = sprintf(str, "%lo", 4294967295);
354     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
355     EXPECT_STREQ(str, "37777777777");
356 
357     ret = sprintf(str, "%lo", 0);
358     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
359     EXPECT_STREQ(str, "0");
360 
361     ret = sprintf(str, "%*o", 10, 65535);
362     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
363     EXPECT_STREQ(str, "    177777");
364 }
365 
366  /**
367  * @tc.number SUB_KERNEL_IO_SPRINTF_1200
368  * @tc.name   sprintf basic function test of octal with width
369  * @tc.desc   [C- SOFTWARE -0200]
370  */
HWTEST_F(IoTest, testSprintfOctalWidth, Function | MediumTest | Level1)371 HWTEST_F(IoTest, testSprintfOctalWidth, Function | MediumTest | Level1)
372 {
373     char str[50] = {0};
374     int ret = sprintf(str, "%10o", 65535);
375     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
376     EXPECT_STREQ(str, "    177777");
377 
378     ret = sprintf(str, "% 10o", 65535);
379     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
380     EXPECT_STREQ(str, "    177777");
381 
382     ret = sprintf(str, "%010o", 65535);
383     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
384     EXPECT_STREQ(str, "0000177777");
385 
386     ret = sprintf(str, "%-10o", 65535);
387     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
388     EXPECT_STREQ(str, "177777    ");
389 
390     ret = sprintf(str, "%+10o", 65535);
391     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
392     EXPECT_STREQ(str, "    177777");
393 
394     ret = sprintf(str, "%0-10o", 65535);
395     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
396     EXPECT_STREQ(str, "177777    ");
397 
398     ret = sprintf(str, "%.10o", 65535);
399     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
400     EXPECT_STREQ(str, "0000177777");
401 
402     ret = sprintf(str, "%#10o", 65535);
403     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
404     EXPECT_STREQ(str, "   0177777");
405 
406     ret = sprintf(str, "%#010o", 65535);
407     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
408     EXPECT_STREQ(str, "0000177777");
409 
410     ret = sprintf(str, "%10.8o", 65535);
411     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
412     EXPECT_STREQ(str, "  00177777");
413 }
414 
415  /**
416  * @tc.number SUB_KERNEL_IO_SPRINTF_1300
417  * @tc.name   sprintf basic function test of lowercase hex with boundary value
418  * @tc.desc   [C- SOFTWARE -0200]
419  */
HWTEST_F(IoTest, testSprintfLowercaseHex, Function | MediumTest | Level1)420 HWTEST_F(IoTest, testSprintfLowercaseHex, Function | MediumTest | Level1)
421 {
422     char str[50] = {0};
423     int ret = sprintf(str, "%x", 4294967295);
424     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
425     EXPECT_STREQ(str, "ffffffff");
426 
427     ret = sprintf(str, "%x", 0);
428     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
429     EXPECT_STREQ(str, "0");
430 
431     ret = sprintf(str, "%x", -1);
432     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
433     EXPECT_STREQ(str, "ffffffff");
434 
435     ret = sprintf(str, "%lx", 4294967295);
436     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
437     EXPECT_STREQ(str, "ffffffff");
438 
439     ret = sprintf(str, "%lx", 0);
440     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
441     EXPECT_STREQ(str, "0");
442 
443     ret = sprintf(str, "%*x", 10, 65535);
444     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
445     EXPECT_STREQ(str, "      ffff");
446 }
447 
448  /**
449  * @tc.number SUB_KERNEL_IO_SPRINTF_1400
450  * @tc.name   sprintf basic function test of lowercase hex with width
451  * @tc.desc   [C- SOFTWARE -0200]
452  */
HWTEST_F(IoTest, testSprintfLowercaseHexWidth, Function | MediumTest | Level1)453 HWTEST_F(IoTest, testSprintfLowercaseHexWidth, Function | MediumTest | Level1)
454 {
455     char str[50] = {0};
456     int ret = sprintf(str, "%10x", 65535);
457     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
458     EXPECT_STREQ(str, "      ffff");
459 
460     ret = sprintf(str, "% 10x", 65535);
461     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
462     EXPECT_STREQ(str, "      ffff");
463 
464     ret = sprintf(str, "%010x", 65535);
465     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
466     EXPECT_STREQ(str, "000000ffff");
467 
468     ret = sprintf(str, "%-10x", 65535);
469     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
470     EXPECT_STREQ(str, "ffff      ");
471 
472     ret = sprintf(str, "%+10x", 65535);
473     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
474     EXPECT_STREQ(str, "      ffff");
475 
476     ret = sprintf(str, "%0-10x", 65535);
477     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
478     EXPECT_STREQ(str, "ffff      ");
479 
480     ret = sprintf(str, "%.10x", 65535);
481     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
482     EXPECT_STREQ(str, "000000ffff");
483 
484     ret = sprintf(str, "%#10x", 65535);
485     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
486     EXPECT_STREQ(str, "    0xffff");
487 
488     ret = sprintf(str, "%#010x", 65535);
489     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
490     EXPECT_STREQ(str, "0x0000ffff");
491 
492     ret = sprintf(str, "%10.8x", 65535);
493     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
494     EXPECT_STREQ(str, "  0000ffff");
495 }
496 
497  /**
498  * @tc.number SUB_KERNEL_IO_SPRINTF_1500
499  * @tc.name   sprintf basic function test of uppercase hex with boundary value
500  * @tc.desc   [C- SOFTWARE -0200]
501  */
HWTEST_F(IoTest, testSprintfUppercaseHex, Function | MediumTest | Level1)502 HWTEST_F(IoTest, testSprintfUppercaseHex, Function | MediumTest | Level1)
503 {
504     char str[50] = {0};
505     int ret = sprintf(str, "%X", 4294967295);
506     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
507     EXPECT_STREQ(str, "FFFFFFFF");
508 
509     ret = sprintf(str, "%X", 0);
510     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
511     EXPECT_STREQ(str, "0");
512 
513     ret = sprintf(str, "%X", -1);
514     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
515     EXPECT_STREQ(str, "FFFFFFFF");
516 
517     ret = sprintf(str, "%lX", 4294967295);
518     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
519     EXPECT_STREQ(str, "FFFFFFFF");
520 
521     ret = sprintf(str, "%lX", 0);
522     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
523     EXPECT_STREQ(str, "0");
524 
525     ret = sprintf(str, "%*X", 10, 65535);
526     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
527     EXPECT_STREQ(str, "      FFFF");
528 }
529 
530  /**
531  * @tc.number SUB_KERNEL_IO_SPRINTF_1600
532  * @tc.name   sprintf basic function test of uppercase hex with width
533  * @tc.desc   [C- SOFTWARE -0200]
534  */
HWTEST_F(IoTest, testSprintfUppercaseHexWidth, Function | MediumTest | Level1)535 HWTEST_F(IoTest, testSprintfUppercaseHexWidth, Function | MediumTest | Level1)
536 {
537     char str[50] = {0};
538     int ret = sprintf(str, "%10X", 65535);
539     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
540     EXPECT_STREQ(str, "      FFFF");
541 
542     ret = sprintf(str, "% 10X", 65535);
543     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
544     EXPECT_STREQ(str, "      FFFF");
545 
546     ret = sprintf(str, "%010X", 65535);
547     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
548     EXPECT_STREQ(str, "000000FFFF");
549 
550     ret = sprintf(str, "%*X", 10, 65535);
551     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
552     EXPECT_STREQ(str, "      FFFF");
553 
554     ret = sprintf(str, "%-10X", 65535);
555     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
556     EXPECT_STREQ(str, "FFFF      ");
557 
558     ret = sprintf(str, "%+10X", 65535);
559     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
560     EXPECT_STREQ(str, "      FFFF");
561 
562     ret = sprintf(str, "%0-10X", 65535);
563     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
564     EXPECT_STREQ(str, "FFFF      ");
565 
566     ret = sprintf(str, "%.10X", 65535);
567     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
568     EXPECT_STREQ(str, "000000FFFF");
569 
570     ret = sprintf(str, "%#10X", 65535);
571     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
572     EXPECT_STREQ(str, "    0XFFFF");
573 
574     ret = sprintf(str, "%#010X", 65535);
575     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
576     EXPECT_STREQ(str, "0X0000FFFF");
577 
578     ret = sprintf(str, "%10.8X", 65535);
579     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
580     EXPECT_STREQ(str, "  0000FFFF");
581 }
582 
583  /**
584  * @tc.number SUB_KERNEL_IO_SPRINTF_1700
585  * @tc.name   sprintf basic function test of float
586  * @tc.desc   [C- SOFTWARE -0200]
587  */
HWTEST_F(IoTest, testSprintfFloat, Function | MediumTest | Level1)588 HWTEST_F(IoTest, testSprintfFloat, Function | MediumTest | Level1)
589 {
590     char str[100] = {0};
591     int ret = sprintf(str, "%f", -1.1);
592     EXPECT_EQ(ret, 9) << "> sprintf fail, errno = " << errno;
593     EXPECT_STREQ(str, "-1.100000");
594 
595     ret = sprintf(str, "%.3f", -.123456);
596     EXPECT_EQ(ret, 6) << "> sprintf fail, errno = " << errno;
597     EXPECT_STREQ(str, "-0.123");
598 
599     ret = sprintf(str, "%Lf", 1.1);
600     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
601     EXPECT_STREQ(str, "1.100000");
602 
603     ret = sprintf(str, "%5.1f %5.1f", 6., -6.);
604     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
605     EXPECT_STREQ(str, "  6.0  -6.0");
606 
607     ret = sprintf(str, "%05.1f %05.1f", 6., -6.);
608     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
609     EXPECT_STREQ(str, "006.0 -06.0");
610 
611     ret = sprintf(str, "%+05.1f %+05.1f", 6., -6.);
612     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
613     EXPECT_STREQ(str, "+06.0 -06.0");
614 
615     ret = sprintf(str, "%.3f %.5f", 1.6666, -1.1);
616     EXPECT_EQ(ret, 14) << "> sprintf fail, errno = " << errno;
617     EXPECT_STREQ(str, "1.667 -1.10000");
618 
619     ret = sprintf(str, "%.0f %.0f", 1.1, 1.6);
620     EXPECT_EQ(ret, 3) << "> sprintf fail, errno = " << errno;
621     EXPECT_STREQ(str, "1 2");
622 
623     ret = sprintf(str, "%+3.2f %+3.2f", 1.1, -1.1);
624     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
625     EXPECT_STREQ(str, "+1.10 -1.10");
626 
627     ret = sprintf(str, "hello %+3.2f world", 1.1);
628     EXPECT_EQ(ret, 17) << "> sprintf fail, errno = " << errno;
629     EXPECT_STREQ(str, "hello +1.10 world");
630 
631     ret = sprintf(str, "%.*f", 3, 1.6666666666);
632     EXPECT_EQ(ret, 5) << "> sprintf fail, errno = " << errno;
633     EXPECT_STREQ(str, "1.667");
634 }
635 
636  /**
637  * @tc.number SUB_KERNEL_IO_SPRINTF_1800
638  * @tc.name   sprintf basic function test of float with format a
639  * @tc.desc   [C- SOFTWARE -0200]
640  */
HWTEST_F(IoTest, testSprintfLowercaseA, Function | MediumTest | Level1)641 HWTEST_F(IoTest, testSprintfLowercaseA, Function | MediumTest | Level1)
642 {
643     char str[50] = {0};
644     int ret = sprintf(str, "%a", 0.00457878e+16);
645     EXPECT_EQ(ret, 17) << "> sprintf fail, errno = " << errno;
646     EXPECT_STREQ(str, "0x1.4d266c6ebp+45");
647 
648     ret = sprintf(str, "%La", 0.00457878e+16);
649     EXPECT_EQ(ret, 17) << "> sprintf fail, errno = " << errno;
650     EXPECT_STREQ(str, "0x1.4d266c6ebp+45");
651 
652     ret = sprintf(str, "%.*a", 3, 1.6666666666);
653     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
654     EXPECT_STREQ(str, "0x1.aabp+0");
655 
656     ret = sprintf(str, "%.3a %.5a", 1.6666, -1.1);
657     EXPECT_EQ(ret, 24) << "> sprintf fail, errno = " << errno;
658     EXPECT_STREQ(str, "0x1.aaap+0 -0x1.1999ap+0");
659 
660     ret = sprintf(str, "%5.1a %10.1a", 6., -6.);
661     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
662     EXPECT_STREQ(str, "0x1.8p+2  -0x1.8p+2");
663 
664     ret = sprintf(str, "%05.1a %010.1a", 6., -6.);
665     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
666     EXPECT_STREQ(str, "0x1.8p+2 -0x01.8p+2");
667 
668     ret = sprintf(str, "%+05.1a %+010.1a", 6., -6.);
669     EXPECT_EQ(ret, 20) << "> sprintf fail, errno = " << errno;
670     EXPECT_STREQ(str, "+0x1.8p+2 -0x01.8p+2");
671 
672     ret = sprintf(str, "%.0a %.0a", 1.1, 1.6);
673     EXPECT_EQ(ret, 13) << "> sprintf fail, errno = " << errno;
674     EXPECT_STREQ(str, "0x1p+0 0x2p+0");
675 
676     ret = sprintf(str, "%+3.2a %+3.2a", 1.1, -1.1);
677     EXPECT_EQ(ret, 21) << "> sprintf fail, errno = " << errno;
678     EXPECT_STREQ(str, "+0x1.1ap+0 -0x1.1ap+0");
679 
680     ret = sprintf(str, "hello %+3.2a world", 1.1);
681     EXPECT_EQ(ret, 22) << "> sprintf fail, errno = " << errno;
682     EXPECT_STREQ(str, "hello +0x1.1ap+0 world");
683 }
684 
685  /**
686  * @tc.number SUB_KERNEL_IO_SPRINTF_1900
687  * @tc.name   sprintf basic function test of float with format A
688  * @tc.desc   [C- SOFTWARE -0200]
689  */
HWTEST_F(IoTest, testSprintfUppercaseA, Function | MediumTest | Level1)690 HWTEST_F(IoTest, testSprintfUppercaseA, Function | MediumTest | Level1)
691 {
692     char str[50] = {0};
693     int ret = sprintf(str, "%A", -0.00457878e+16);
694     EXPECT_EQ(ret, 18) << "> sprintf fail, errno = " << errno;
695     EXPECT_STREQ(str, "-0X1.4D266C6EBP+45");
696 
697     ret = sprintf(str, "%LA", -0.00457878e+16);
698     EXPECT_EQ(ret, 18) << "> sprintf fail, errno = " << errno;
699     EXPECT_STREQ(str, "-0X1.4D266C6EBP+45");
700 
701     ret = sprintf(str, "%.*A", 3, 1.6666666666);
702     EXPECT_EQ(ret, 10) << "> sprintf fail, errno = " << errno;
703     EXPECT_STREQ(str, "0X1.AABP+0");
704 
705     ret = sprintf(str, "%.3A %.5A", 1.6666, -1.1);
706     EXPECT_EQ(ret, 24) << "> sprintf fail, errno = " << errno;
707     EXPECT_STREQ(str, "0X1.AAAP+0 -0X1.1999AP+0");
708 
709     ret = sprintf(str, "%5.1A %10.1A", 6., -6.);
710     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
711     EXPECT_STREQ(str, "0X1.8P+2  -0X1.8P+2");
712 
713     ret = sprintf(str, "%05.1A %010.1A", 6., -6.);
714     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
715     EXPECT_STREQ(str, "0X1.8P+2 -0X01.8P+2");
716 
717     ret = sprintf(str, "%+05.1A %+010.1A", 6., -6.);
718     EXPECT_EQ(ret, 20) << "> sprintf fail, errno = " << errno;
719     EXPECT_STREQ(str, "+0X1.8P+2 -0X01.8P+2");
720 
721     ret = sprintf(str, "%.0A %.0A", 1.1, 1.6);
722     EXPECT_EQ(ret, 13) << "> sprintf fail, errno = " << errno;
723     EXPECT_STREQ(str, "0X1P+0 0X2P+0");
724 
725     ret = sprintf(str, "%+3.2A %+3.2A", 1.1, -1.1);
726     EXPECT_EQ(ret, 21) << "> sprintf fail, errno = " << errno;
727     EXPECT_STREQ(str, "+0X1.1AP+0 -0X1.1AP+0");
728 
729     ret = sprintf(str, "hello %+3.2A world", 1.1);
730     EXPECT_EQ(ret, 22) << "> sprintf fail, errno = " << errno;
731     EXPECT_STREQ(str, "hello +0X1.1AP+0 world");
732 }
733 
734  /**
735  * @tc.number SUB_KERNEL_IO_SPRINTF_2000
736  * @tc.name   sprintf basic function test of float with format E,lowercase
737  * @tc.desc   [C- SOFTWARE -0200]
738  */
HWTEST_F(IoTest, testSprintfLowercaseE, Function | MediumTest | Level1)739 HWTEST_F(IoTest, testSprintfLowercaseE, Function | MediumTest | Level1)
740 {
741     char str[50] = {0};
742     int ret = sprintf(str, "%e", 0.00457878e+16);
743     EXPECT_EQ(ret, 12) << "> sprintf fail, errno = " << errno;
744     EXPECT_STREQ(str, "4.578780e+13");
745 
746     ret = sprintf(str, "%Le", 0.00457878e+16);
747     EXPECT_EQ(ret, 12) << "> sprintf fail, errno = " << errno;
748     EXPECT_STREQ(str, "4.578780e+13");
749 
750     ret = sprintf(str, "%.*e", 3, 1.6666666666);
751     EXPECT_EQ(ret, 9) << "> sprintf fail, errno = " << errno;
752     EXPECT_STREQ(str, "1.667e+00");
753 
754     ret = sprintf(str, "%5.1e %10.1e", 6., -6.);
755     EXPECT_EQ(ret, 18) << "> sprintf fail, errno = " << errno;
756     EXPECT_STREQ(str, "6.0e+00   -6.0e+00");
757 
758     ret = sprintf(str, "%05.1e %010.1e", 6., -6.);
759     EXPECT_EQ(ret, 18) << "> sprintf fail, errno = " << errno;
760     EXPECT_STREQ(str, "6.0e+00 -006.0e+00");
761 
762     ret = sprintf(str, "%+05.1e %+010.1e", 6., -6.);
763     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
764     EXPECT_STREQ(str, "+6.0e+00 -006.0e+00");
765 
766     ret = sprintf(str, "%.3e %.5e", 1.6666, -1.1);
767     EXPECT_EQ(ret, 22) << "> sprintf fail, errno = " << errno;
768     EXPECT_STREQ(str, "1.667e+00 -1.10000e+00");
769 
770     ret = sprintf(str, "%.0e %.0e", 1.1, 1.6);
771     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
772     EXPECT_STREQ(str, "1e+00 2e+00");
773 
774     ret = sprintf(str, "%+3.2e %+3.2e", 1.1, -1.1);
775     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
776     EXPECT_STREQ(str, "+1.10e+00 -1.10e+00");
777 
778     ret = sprintf(str, "hello %+3.2e world", 1.1);
779     EXPECT_EQ(ret, 21) << "> sprintf fail, errno = " << errno;
780     EXPECT_STREQ(str, "hello +1.10e+00 world");
781 }
782 
783  /**
784  * @tc.number SUB_KERNEL_IO_SPRINTF_2100
785  * @tc.name   sprintf basic function test of float with format E,uppercase
786  * @tc.desc   [C- SOFTWARE -0200]
787  */
HWTEST_F(IoTest, testSprintfUppercaseE, Function | MediumTest | Level1)788 HWTEST_F(IoTest, testSprintfUppercaseE, Function | MediumTest | Level1)
789 {
790     char str[50] = {0};
791     int ret = sprintf(str, "%E", -0.00457878e+16);
792     EXPECT_EQ(ret, 13) << "> sprintf fail, errno = " << errno;
793     EXPECT_STREQ(str, "-4.578780E+13");
794 
795     ret = sprintf(str, "%LE", -0.00457878e+16);
796     EXPECT_EQ(ret, 13) << "> sprintf fail, errno = " << errno;
797     EXPECT_STREQ(str, "-4.578780E+13");
798 
799     ret = sprintf(str, "%.*E", 3, 1.6666666666);
800     EXPECT_EQ(ret, 9) << "> sprintf fail, errno = " << errno;
801     EXPECT_STREQ(str, "1.667E+00");
802 
803     ret = sprintf(str, "%5.1E %10.1E", 6., -6.);
804     EXPECT_EQ(ret, 18) << "> sprintf fail, errno = " << errno;
805     EXPECT_STREQ(str, "6.0E+00   -6.0E+00");
806 
807     ret = sprintf(str, "%05.1E %010.1E", 6., -6.);
808     EXPECT_EQ(ret, 18) << "> sprintf fail, errno = " << errno;
809     EXPECT_STREQ(str, "6.0E+00 -006.0E+00");
810 
811     ret = sprintf(str, "%+05.1E %+010.1E", 6., -6.);
812     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
813     EXPECT_STREQ(str, "+6.0E+00 -006.0E+00");
814 
815     ret = sprintf(str, "%.3E %.5E", 1.6666, -1.1);
816     EXPECT_EQ(ret, 22) << "> sprintf fail, errno = " << errno;
817     EXPECT_STREQ(str, "1.667E+00 -1.10000E+00");
818 
819     ret = sprintf(str, "%.0E %.0E", 1.1, 1.6);
820     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
821     EXPECT_STREQ(str, "1E+00 2E+00");
822 
823     ret = sprintf(str, "%+3.2E %+3.2E", 1.1, -1.1);
824     EXPECT_EQ(ret, 19) << "> sprintf fail, errno = " << errno;
825     EXPECT_STREQ(str, "+1.10E+00 -1.10E+00");
826 
827     ret = sprintf(str, "hello %+3.2E world", 1.1);
828     EXPECT_EQ(ret, 21) << "> sprintf fail, errno = " << errno;
829     EXPECT_STREQ(str, "hello +1.10E+00 world");
830 }
831 
832  /**
833  * @tc.number SUB_KERNEL_IO_SPRINTF_2200
834  * @tc.name   sprintf basic function test of float with format G,lowercase
835  * @tc.desc   [C- SOFTWARE -0200]
836  */
HWTEST_F(IoTest, testSprintfLowercaseG, Function | MediumTest | Level1)837 HWTEST_F(IoTest, testSprintfLowercaseG, Function | MediumTest | Level1)
838 {
839     char str[50] = {0};
840     int ret = sprintf(str, "%g", 0.00457878e+16);
841     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
842     EXPECT_STREQ(str, "4.57878e+13");
843 
844     ret = sprintf(str, "%Lg", 0.00457878e+16);
845     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
846     EXPECT_STREQ(str, "4.57878e+13");
847 
848     ret = sprintf(str, "%.*g", 3, 1.6666666666);
849     EXPECT_EQ(ret, 4) << "> sprintf fail, errno = " << errno;
850     EXPECT_STREQ(str, "1.67");
851 
852     ret = sprintf(str, "%5.1g %10.1g", 6., -6.);
853     EXPECT_EQ(ret, 16) << "> sprintf fail, errno = " << errno;
854     EXPECT_STREQ(str, "    6         -6");
855 
856     ret = sprintf(str, "%05.1g %010.1g", 6., -6.);
857     EXPECT_EQ(ret, 16) << "> sprintf fail, errno = " << errno;
858     EXPECT_STREQ(str, "00006 -000000006");
859 
860     ret = sprintf(str, "%+05.1g %+010.1g", 6., -6.);
861     EXPECT_EQ(ret, 16) << "> sprintf fail, errno = " << errno;
862     EXPECT_STREQ(str, "+0006 -000000006");
863 
864     ret = sprintf(str, "%.3g %.5g", 1.6666, -1.1);
865     EXPECT_EQ(ret, 9) << "> sprintf fail, errno = " << errno;
866     EXPECT_STREQ(str, "1.67 -1.1");
867 
868     ret = sprintf(str, "%.0g %.0g", 1.1, 1.6);
869     EXPECT_EQ(ret, 3) << "> sprintf fail, errno = " << errno;
870     EXPECT_STREQ(str, "1 2");
871 
872     ret = sprintf(str, "%+3.2g %+3.2g", 1.1, -1.1);
873     EXPECT_EQ(ret, 9) << "> sprintf fail, errno = " << errno;
874     EXPECT_STREQ(str, "+1.1 -1.1");
875 
876     ret = sprintf(str, "hello %+3.2g world", 1.1);
877     EXPECT_EQ(ret, 16) << "> sprintf fail, errno = " << errno;
878     EXPECT_STREQ(str, "hello +1.1 world");
879 }
880 
881  /**
882  * @tc.number SUB_KERNEL_IO_SPRINTF_2300
883  * @tc.name   sprintf basic function test of float with format G,uppercase
884  * @tc.desc   [C- SOFTWARE -0200]
885  */
HWTEST_F(IoTest, testSprintfUppercaseG, Function | MediumTest | Level1)886 HWTEST_F(IoTest, testSprintfUppercaseG, Function | MediumTest | Level1)
887 {
888     char str[50] = {0};
889     int ret = sprintf(str, "%G", 0.00457878e+16);
890     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
891     EXPECT_STREQ(str, "4.57878E+13");
892 
893     ret = sprintf(str, "%LG", 0.00457878e+16);
894     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
895     EXPECT_STREQ(str, "4.57878E+13");
896 
897     ret = sprintf(str, "%.*G", 3, 1.6666666666);
898     EXPECT_EQ(ret, 4) << "> sprintf fail, errno = " << errno;
899     EXPECT_STREQ(str, "1.67");
900 
901     ret = sprintf(str, "%5.1G %10.1G", 6., -6.);
902     EXPECT_EQ(ret, 16) << "> sprintf fail, errno = " << errno;
903     EXPECT_STREQ(str, "    6         -6");
904 
905     ret = sprintf(str, "%05.1G %010.1G", 6., -6.);
906     EXPECT_EQ(ret, 16) << "> sprintf fail, errno = " << errno;
907     EXPECT_STREQ(str, "00006 -000000006");
908 
909     ret = sprintf(str, "%+05.1G %+010.1G", 6., -6.);
910     EXPECT_EQ(ret, 16) << "> sprintf fail, errno = " << errno;
911     EXPECT_STREQ(str, "+0006 -000000006");
912 
913     ret = sprintf(str, "%.3G %.5G", 1.6666, -1.1);
914     EXPECT_EQ(ret, 9) << "> sprintf fail, errno = " << errno;
915     EXPECT_STREQ(str, "1.67 -1.1");
916 
917     ret = sprintf(str, "%.0G %.0G", 1.1, 1.6);
918     EXPECT_EQ(ret, 3) << "> sprintf fail, errno = " << errno;
919     EXPECT_STREQ(str, "1 2");
920 
921     ret = sprintf(str, "%+3.2G %+3.2G", 1.1, -1.1);
922     EXPECT_EQ(ret, 9) << "> sprintf fail, errno = " << errno;
923     EXPECT_STREQ(str, "+1.1 -1.1");
924 
925     ret = sprintf(str, "hello %+3.2G world", 1.1);
926     EXPECT_EQ(ret, 16) << "> sprintf fail, errno = " << errno;
927     EXPECT_STREQ(str, "hello +1.1 world");
928 }
929 
930  /**
931  * @tc.number SUB_KERNEL_IO_SPRINTF_2400
932  * @tc.name   sprintf basic function test of string
933  * @tc.desc   [C- SOFTWARE -0200]
934  */
HWTEST_F(IoTest, testSprintfString, Function | MediumTest | Level1)935 HWTEST_F(IoTest, testSprintfString, Function | MediumTest | Level1)
936 {
937     char str[100] = {0};
938     int ret = sprintf(str, "%s", "hello world");
939     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
940     EXPECT_STREQ(str, "hello world");
941 
942     ret = sprintf(str, "%7s", "hello");
943     EXPECT_EQ(ret, 7) << "> sprintf fail, errno = " << errno;
944     EXPECT_STREQ(str, "  hello");
945 
946     ret = sprintf(str, "%-7s", "hello");
947     EXPECT_EQ(ret, 7) << "> sprintf fail, errno = " << errno;
948     EXPECT_STREQ(str, "hello  ");
949 
950     ret = sprintf(str, "%0-7s", "hello");
951     EXPECT_EQ(ret, 7) << "> sprintf fail, errno = " << errno;
952     EXPECT_STREQ(str, "hello  ");
953 
954     ret = sprintf(str, "%.6s", "hello");
955     EXPECT_EQ(ret, 5) << "> sprintf fail, errno = " << errno;
956     EXPECT_STREQ(str, "hello");
957 
958     ret = sprintf(str, "%.6s", "");
959     EXPECT_EQ(ret, 0) << "> sprintf fail, errno = " << errno;
960     EXPECT_STREQ(str, "");
961 
962     ret = sprintf(str, "%.3s", "hello");
963     EXPECT_EQ(ret, 3) << "> sprintf fail, errno = " << errno;
964     EXPECT_STREQ(str, "hel");
965 
966     ret = sprintf(str, "%.3s%.6s", "abcd", "hello");
967     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
968     EXPECT_STREQ(str, "abchello");
969 
970     ret = sprintf(str, "%.3s%.6s", "abcd", "hello");
971     EXPECT_EQ(ret, 8) << "> sprintf fail, errno = " << errno;
972     EXPECT_STREQ(str, "abchello");
973 
974     ret = sprintf(str, "%6.3s", "hello world");
975     EXPECT_EQ(ret, 6) << "> sprintf fail, errno = " << errno;
976     EXPECT_STREQ(str, "   hel");
977 
978     ret = sprintf(str, "%*s", 5, "hello world");
979     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
980     EXPECT_STREQ(str, "hello world");
981 
982     ret = sprintf(str, "%.*s", 5, "hello world");
983     EXPECT_EQ(ret, 5) << "> sprintf fail, errno = " << errno;
984     EXPECT_STREQ(str, "hello");
985 
986     ret = sprintf(str, "123 %s 000", "hello");
987     EXPECT_EQ(ret, 13) << "> sprintf fail, errno = " << errno;
988     EXPECT_STREQ(str, "123 hello 000");
989 
990     ret = sprintf(str, "th%s(a)|%s|", "is", "string");
991     EXPECT_EQ(ret, 15) << "> sprintf fail, errno = " << errno;
992     EXPECT_STREQ(str, "this(a)|string|");
993 }
994 
995  /**
996  * @tc.number SUB_KERNEL_IO_SPRINTF_2500
997  * @tc.name   sprintf basic function test of char
998  * @tc.desc   [C- SOFTWARE -0200]
999  */
HWTEST_F(IoTest, testSprintfChar, Function | MediumTest | Level1)1000 HWTEST_F(IoTest, testSprintfChar, Function | MediumTest | Level1)
1001 {
1002     char str[100] = {0};
1003     int ret = sprintf(str, "%c", 97);
1004     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
1005     EXPECT_STREQ(str, "a");
1006 
1007     ret = sprintf(str, "%5c", 97);
1008     EXPECT_EQ(ret, 5) << "> sprintf fail, errno = " << errno;
1009     EXPECT_STREQ(str, "    a");
1010 
1011     ret = sprintf(str, "%-5c", 97);
1012     EXPECT_EQ(ret, 5) << "> sprintf fail, errno = " << errno;
1013     EXPECT_STREQ(str, "a    ");
1014 
1015     ret = sprintf(str, "%0-5c", 97);
1016     EXPECT_EQ(ret, 5) << "> sprintf fail, errno = " << errno;
1017     EXPECT_STREQ(str, "a    ");
1018 
1019     ret = sprintf(str, "hello %c world", '!');
1020     EXPECT_EQ(ret, 13) << "> sprintf fail, errno = " << errno;
1021     EXPECT_STREQ(str, "hello ! world");
1022 
1023     ret = sprintf(str, "(%c) and |%.5c|", 'a', 'b');
1024     EXPECT_EQ(ret, 11) << "> sprintf fail, errno = " << errno;
1025     EXPECT_STREQ(str, "(a) and |b|");
1026 }
1027 
1028  /**
1029  * @tc.number SUB_KERNEL_IO_SPRINTF_2600
1030  * @tc.name   sprintf basic function test of pointer
1031  * @tc.desc   [C- SOFTWARE -0200]
1032  */
HWTEST_F(IoTest, testSprintfPointer, Function | MediumTest | Level1)1033 HWTEST_F(IoTest, testSprintfPointer, Function | MediumTest | Level1)
1034 {
1035     char str[100] = {0};
1036     int ret = sprintf(str, "%p", 97);
1037     EXPECT_EQ(ret, 4) << "> sprintf fail, errno = " << errno;
1038     EXPECT_STREQ(str, "0x61");
1039 
1040     ret = sprintf(str, "%p * %p", 255, 65535);
1041     EXPECT_EQ(ret, 13) << "> sprintf fail, errno = " << errno;
1042     EXPECT_STREQ(str, "0xff * 0xffff");
1043 
1044     ret = sprintf(str, "%p", 0xfffff);
1045     EXPECT_EQ(ret, 7) << "> sprintf fail, errno = " << errno;
1046     EXPECT_STREQ(str, "0xfffff");
1047 }
1048 
1049  /**
1050  * @tc.number SUB_KERNEL_IO_SPRINTF_2700
1051  * @tc.name   sprintf basic function test of percent format
1052  * @tc.desc   [C- SOFTWARE -0200]
1053  */
HWTEST_F(IoTest, testSprintfPercent, Function | MediumTest | Level1)1054 HWTEST_F(IoTest, testSprintfPercent, Function | MediumTest | Level1)
1055 {
1056     char str[100] = {0};
1057     int ret = sprintf(str, "%%", 97);
1058     EXPECT_EQ(ret, 1) << "> sprintf fail, errno = " << errno;
1059     EXPECT_STREQ(str, "%");
1060 }