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
21using 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 */
28HWTEST_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 */
61HWTEST_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 */
94HWTEST_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 */
127HWTEST_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 */
152HWTEST_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 */
169HWTEST_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 */
186HWTEST_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 */
203HWTEST_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 */
248HWTEST_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 */
281HWTEST_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 */
338HWTEST_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 */
371HWTEST_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 */
420HWTEST_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 */
453HWTEST_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 */
502HWTEST_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 */
535HWTEST_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 */
588HWTEST_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 */
641HWTEST_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 */
690HWTEST_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 */
739HWTEST_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 */
788HWTEST_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 */
837HWTEST_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 */
886HWTEST_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 */
935HWTEST_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 */
1000HWTEST_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 */
1033HWTEST_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 */
1054HWTEST_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}