1 | import strings |
2 | |
3 | type MyInt = int |
4 | |
5 | const maxn = 100000 |
6 | |
7 | fn test_sb() { |
8 | mut sb := strings.new_builder(100) |
9 | sb.write_string('hi') |
10 | sb.write_string('!') |
11 | sb.write_string('hello') |
12 | assert sb.len == 8 |
13 | sb_end := sb.str() |
14 | assert sb_end == 'hi!hello' |
15 | assert sb.len == 0 |
16 | /// |
17 | sb = strings.new_builder(10) |
18 | sb.write_string('a') |
19 | sb.write_string('b') |
20 | assert sb.len == 2 |
21 | assert sb.str() == 'ab' |
22 | // Test interpolation optimization |
23 | sb = strings.new_builder(10) |
24 | x := 10 |
25 | y := MyInt(20) |
26 | sb.writeln('x = ${x} y = ${y}') |
27 | res := sb.str() |
28 | assert res[res.len - 1] == `\n` |
29 | println('"${res}"') |
30 | assert res.trim_space() == 'x = 10 y = 20' |
31 | // |
32 | sb = strings.new_builder(10) |
33 | sb.write_string('x = ${x} y = ${y}') |
34 | assert sb.str() == 'x = 10 y = 20' |
35 | //$if !windows { |
36 | sb = strings.new_builder(10) |
37 | sb.write_string('123456') |
38 | last_2 := sb.cut_last(2) |
39 | assert last_2 == '56' |
40 | final_sb := sb.str() |
41 | assert final_sb == '1234' |
42 | |
43 | sb.clear() |
44 | assert sb.str() == '' |
45 | //} |
46 | } |
47 | |
48 | fn test_big_sb() { |
49 | mut sb := strings.new_builder(100) |
50 | mut sb2 := strings.new_builder(10000) |
51 | for i in 0 .. maxn { |
52 | sb.writeln(i.str()) |
53 | sb2.write_string('+') |
54 | } |
55 | s := sb.str() |
56 | lines := s.split_into_lines() |
57 | assert lines.len == maxn |
58 | assert lines[0] == '0' |
59 | assert lines[1] == '1' |
60 | assert lines[777] == '777' |
61 | assert lines[98765] == '98765' |
62 | println(sb2.len) |
63 | assert sb2.len == maxn |
64 | } |
65 | |
66 | fn test_byte_write() { |
67 | mut sb := strings.new_builder(100) |
68 | temp_str := 'byte testing' |
69 | mut count := 0 |
70 | for word in temp_str { |
71 | sb.write_u8(word) |
72 | count++ |
73 | assert count == sb.len |
74 | } |
75 | sb_final := sb.str() |
76 | assert sb_final == temp_str |
77 | } |
78 | |
79 | fn test_strings_builder_reuse() { |
80 | mut sb := strings.new_builder(256) |
81 | sb.write_string('world') |
82 | assert sb.str() == 'world' |
83 | sb.write_string('hello') |
84 | assert sb.str() == 'hello' |
85 | } |
86 | |
87 | fn test_cut_to() { |
88 | mut sb := strings.new_builder(16) |
89 | sb.write_string('hello') |
90 | assert sb.cut_to(3) == 'lo' |
91 | assert sb.len == 3 |
92 | assert sb.cut_to(3) == '' |
93 | assert sb.len == 3 |
94 | assert sb.cut_to(0) == 'hel' |
95 | assert sb.cut_to(32) == '' |
96 | assert sb.len == 0 |
97 | } |