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