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 | fn test_big_sb() { |
48 | mut sb := strings.new_builder(100) |
49 | mut sb2 := strings.new_builder(10000) |
50 | for i in 0 .. maxn { |
51 | sb.writeln(i.str()) |
52 | sb2.write_string('+') |
53 | } |
54 | s := sb.str() |
55 | lines := s.split_into_lines() |
56 | assert lines.len == maxn |
57 | assert lines[0] == '0' |
58 | assert lines[1] == '1' |
59 | assert lines[777] == '777' |
60 | assert lines[98765] == '98765' |
61 | println(sb2.len) |
62 | assert sb2.len == maxn |
63 | } |
64 | |
65 | fn test_byte_write() { |
66 | mut sb := strings.new_builder(100) |
67 | temp_str := 'byte testing' |
68 | mut count := 0 |
69 | for word in temp_str { |
70 | sb.write_u8(word) |
71 | count++ |
72 | assert count == sb.len |
73 | } |
74 | sb_final := sb.str() |
75 | assert sb_final == temp_str |
76 | } |
77 | |
78 | fn test_strings_builder_reuse() { |
79 | mut sb := strings.new_builder(256) |
80 | sb.write_string('world') |
81 | assert sb.str() == 'world' |
82 | sb.write_string('hello') |
83 | assert sb.str() == 'hello' |
84 | } |
85 | |
86 | fn test_cut_to() { |
87 | mut sb := strings.new_builder(16) |
88 | sb.write_string('hello') |
89 | assert sb.cut_to(3) == 'lo' |
90 | assert sb.len == 3 |
91 | assert sb.cut_to(3) == '' |
92 | assert sb.len == 3 |
93 | assert sb.cut_to(0) == 'hel' |
94 | assert sb.cut_to(32) == '' |
95 | assert sb.len == 0 |
96 | } |
97 | |
98 | fn test_write_rune() { |
99 | mut sb := strings.new_builder(10) |
100 | sb.write_rune(`h`) |
101 | sb.write_rune(`e`) |
102 | sb.write_rune(`l`) |
103 | sb.write_rune(`l`) |
104 | sb.write_rune(`o`) |
105 | x := sb.str() |
106 | assert x == 'hello' |
107 | } |
108 | |
109 | fn test_write_runes() { |
110 | mut sb := strings.new_builder(20) |
111 | sb.write_runes([`h`, `e`, `l`, `l`, `o`]) |
112 | sb.write_rune(` `) |
113 | sb.write_runes([`w`, `o`, `r`, `l`, `d`]) |
114 | x := sb.str() |
115 | assert x == 'hello world' |
116 | } |
117 | |
118 | fn test_ensure_cap() { |
119 | mut sb := strings.new_builder(0) |
120 | assert sb.cap == 0 |
121 | sb.ensure_cap(10) |
122 | assert sb.cap == 10 |
123 | sb.ensure_cap(10) |
124 | assert sb.cap == 10 |
125 | sb.ensure_cap(15) |
126 | assert sb.cap == 15 |
127 | sb.ensure_cap(10) |
128 | assert sb.cap == 15 |
129 | sb.ensure_cap(-1) |
130 | assert sb.cap == 15 |
131 | } |
132 | |
133 | fn test_drain_builder() { |
134 | mut sb := strings.new_builder(0) |
135 | mut target_sb := strings.new_builder(0) |
136 | assert sb.cap == 0 |
137 | assert target_sb.cap == 0 |
138 | |
139 | sb.write_string('abc') |
140 | assert sb.len == 3 |
141 | |
142 | target_sb.drain_builder(mut sb, 0) |
143 | assert sb.len == 0 |
144 | assert target_sb.len == 3 |
145 | assert target_sb.str() == 'abc' |
146 | } |