1 | import strconv |
2 | |
3 | fn test_format() { |
4 | mut temp_s := '' |
5 | mut tmp_str := '' |
6 | a0 := u32(10) |
7 | b0 := 200 |
8 | c0 := u8(12) |
9 | s0 := 'ciAo' |
10 | ch0 := `B` |
11 | f0 := 0.312345 |
12 | f1 := 200000.0 |
13 | f2 := -1234.300e6 |
14 | f3 := 1234.300e-6 |
15 | |
16 | sc0 := 'ciao: [%-08u] %d %hhd [%8s] [%08X] [%-20.4f] [%-20.4f] [%c]' |
17 | temp_s = unsafe { strconv.v_sprintf(sc0, a0, b0, c0, s0, b0, f0, f1, ch0) } |
18 | tmp_str = 'ciao: [10 ] 200 12 [ ciAo] [000000C8] [0.3123 ] [200000.0000 ] [B]' |
19 | // C.printf(sc0.str,a0 ,b0 ,c0 ,s0.str ,b0 ,f0, f1, ch0) |
20 | // println("\n$temp_s") |
21 | assert tmp_str == temp_s |
22 | |
23 | a := u8(12) |
24 | b := i16(13) |
25 | c := 14 |
26 | d := i64(15) |
27 | sc1 := '==>%hhd %hd %d %ld' |
28 | temp_s = unsafe { strconv.v_sprintf(sc1, a, b, c, d) } |
29 | tmp_str = '==>12 13 14 15' |
30 | // C.printf(sc1.str, a ,b ,c, d) |
31 | // println("\n$temp_s") |
32 | assert tmp_str == temp_s |
33 | |
34 | a1 := u8(0xff) |
35 | b1 := i16(0xffff) |
36 | c1 := u32(0xffff_ffff) |
37 | d1 := u64(-1) |
38 | sc2 := '%hhu %hu %u %lu' |
39 | temp_s = unsafe { strconv.v_sprintf(sc2, a1, b1, c1, d1) } |
40 | tmp_str = '255 65535 4294967295 18446744073709551615' |
41 | // C.printf(sc2.str, a1 ,b1 ,c1, d1) |
42 | // println("\n$temp_s") |
43 | assert tmp_str == temp_s |
44 | |
45 | sc3 := '%hhx %hx %x %lx' |
46 | temp_s = unsafe { strconv.v_sprintf(sc3, a1, b1, c1, d1) } |
47 | tmp_str = 'ff ffff ffffffff ffffffffffffffff' |
48 | // C.printf(sc3.str, a1 ,b1 ,c1, d1) |
49 | // println("\n$temp_s") |
50 | assert tmp_str == temp_s |
51 | |
52 | sc4 := '[%-20.3e] [%20.3e] [%-020.3e] [%-020.3E] [%-020.3e] [%-020.3e]' |
53 | temp_s = unsafe { strconv.v_sprintf(sc4, f0, f1, f1, f1, f2, f3) } |
54 | tmp_str = '[3.123e-01 ] [ 2.000e+05] [2.000e+05 ] [2.000E+05 ] [-1.234e+09 ] [1.234e-03 ]' |
55 | // C.printf(sc4.str, f0, f1, f1, f1, f2, f3) |
56 | // println("\n$temp_s") |
57 | assert tmp_str == temp_s |
58 | |
59 | sc5 := '[%.3f] [%0.3f] [%0.3F] [%0.3f] [%0.3F]' |
60 | temp_s = unsafe { strconv.v_sprintf(sc5, f0, f1, f1, f2, f3) } |
61 | tmp_str = '[0.312] [200000.000] [200000.000] [-1234300000.000] [0.001]' |
62 | // C.printf(sc5.str, f0, f1, f1, f2, f3, f3) |
63 | // println("\n$temp_s") |
64 | assert tmp_str == temp_s |
65 | |
66 | ml := 3 |
67 | sc6 := '%.*s [%05hhX]' |
68 | temp_s = unsafe { strconv.v_sprintf(sc6, ml, s0, a) } |
69 | tmp_str = 'ciA [0000C]' |
70 | // C.printf(sc6.str, ml, s0.str, a) |
71 | // println("\n$temp_s") |
72 | assert tmp_str == temp_s |
73 | |
74 | a2 := 125 |
75 | sc7 := '[%9x] [%9X] [%-9x] [%-9X] [%09x] [%09X]' |
76 | temp_s = unsafe { strconv.v_sprintf(sc7, a2, a2, a2, a2, a2, a2) } |
77 | tmp_str = '[ 7d] [ 7D] [7d ] [7D ] [00000007d] [00000007D]' |
78 | // C.printf(sc7.str, a2, a2, a2, a2, a2, a2) |
79 | // println("\n$temp_s") |
80 | assert tmp_str == temp_s |
81 | |
82 | g_test := [ |
83 | '[ -1e-07][ -1E-07]|', |
84 | '[ -1e-06][ -1E-06]|', |
85 | '[ -1e-05][ -1E-05]|', |
86 | '[ -0.0001][ -0.0001]|', |
87 | '[ -0.001][ -0.001]|', |
88 | '[ -0.01][ -0.01]|', |
89 | '[ -0.1][ -0.1]|', |
90 | '[ -1][ -1]|', |
91 | '[ -10][ -10]|', |
92 | '[ -100][ -100]|', |
93 | '[ -1000][ -1000]|', |
94 | '[ -10000][ -10000]|', |
95 | ] |
96 | |
97 | mut ft := -1e-7 |
98 | mut x := 0 |
99 | mut cnt := 0 |
100 | sc8 := '[%20g][%20G]|' |
101 | for x < 12 { |
102 | temp_s = unsafe { strconv.v_sprintf(sc8, ft, ft) } |
103 | // C.printf(sc8.str, ft, ft) |
104 | // println("\n$temp_s") |
105 | assert temp_s == g_test[cnt] |
106 | ft = ft * 10.0 |
107 | x++ |
108 | cnt++ |
109 | } |
110 | } |
111 | |
112 | fn test_sprintf_does_not_double_free_on_g() { |
113 | x := 3.141516 |
114 | assert unsafe { strconv.v_sprintf('aaa %G', x) } == 'aaa 3.141516' |
115 | } |
116 | |
117 | fn test_sprintf_with_escape() { |
118 | n := 69 |
119 | s := unsafe { strconv.v_sprintf('%d is 100%% awesome', n) } |
120 | assert s == '69 is 100% awesome' |
121 | } |