v / vlib / strings
Raw file | 146 loc (133 sloc) | 2.64 KB | Latest commit hash 017ace6ea
1import strings
2
3type MyInt = int
4
5const maxn = 100000
6
7fn 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
47fn 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
65fn 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
78fn 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
86fn 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
98fn 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
109fn 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
118fn 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
133fn 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}