1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/strings/builder_test.v

147 lines
2.9 KiB
V

import strings
type MyInt = int
const maxn = 100000
fn test_sb() {
mut sb := strings.new_builder(100)
sb.write_string('hi')
sb.write_string('!')
sb.write_string('hello')
assert sb.len == 8
sb_end := sb.str()
assert sb_end == 'hi!hello'
assert sb.len == 0
///
sb = strings.new_builder(10)
sb.write_string('a')
sb.write_string('b')
assert sb.len == 2
assert sb.str() == 'ab'
// Test interpolation optimization
sb = strings.new_builder(10)
x := 10
y := MyInt(20)
sb.writeln('x = ${x} y = ${y}')
res := sb.str()
assert res[res.len - 1] == `\n`
println('"${res}"')
assert res.trim_space() == 'x = 10 y = 20'
//
sb = strings.new_builder(10)
sb.write_string('x = ${x} y = ${y}')
assert sb.str() == 'x = 10 y = 20'
//$if !windows {
sb = strings.new_builder(10)
sb.write_string('123456')
last_2 := sb.cut_last(2)
assert last_2 == '56'
final_sb := sb.str()
assert final_sb == '1234'
//}
sb.clear()
assert sb.str() == ''
}
fn test_big_sb() {
mut sb := strings.new_builder(100)
mut sb2 := strings.new_builder(10000)
for i in 0 .. maxn {
sb.writeln(i.str())
sb2.write_string('+')
}
s := sb.str()
lines := s.split_into_lines()
assert lines.len == maxn
assert lines[0] == '0'
assert lines[1] == '1'
assert lines[777] == '777'
assert lines[98765] == '98765'
println(sb2.len)
assert sb2.len == maxn
}
fn test_byte_write() {
mut sb := strings.new_builder(100)
temp_str := 'byte testing'
mut count := 0
for word in temp_str {
sb.write_u8(word)
count++
assert count == sb.len
}
sb_final := sb.str()
assert sb_final == temp_str
}
fn test_strings_builder_reuse() {
mut sb := strings.new_builder(256)
sb.write_string('world')
assert sb.str() == 'world'
sb.write_string('hello')
assert sb.str() == 'hello'
}
fn test_cut_to() {
mut sb := strings.new_builder(16)
sb.write_string('hello')
assert sb.cut_to(3) == 'lo'
assert sb.len == 3
assert sb.cut_to(3) == ''
assert sb.len == 3
assert sb.cut_to(0) == 'hel'
assert sb.cut_to(32) == ''
assert sb.len == 0
}
fn test_write_rune() {
mut sb := strings.new_builder(10)
sb.write_rune(`h`)
sb.write_rune(`e`)
sb.write_rune(`l`)
sb.write_rune(`l`)
sb.write_rune(`o`)
x := sb.str()
assert x == 'hello'
}
fn test_write_runes() {
mut sb := strings.new_builder(20)
sb.write_runes([`h`, `e`, `l`, `l`, `o`])
sb.write_rune(` `)
sb.write_runes([`w`, `o`, `r`, `l`, `d`])
x := sb.str()
assert x == 'hello world'
}
fn test_ensure_cap() {
mut sb := strings.new_builder(0)
assert sb.cap == 0
sb.ensure_cap(10)
assert sb.cap == 10
sb.ensure_cap(10)
assert sb.cap == 10
sb.ensure_cap(15)
assert sb.cap == 15
sb.ensure_cap(10)
assert sb.cap == 15
sb.ensure_cap(-1)
assert sb.cap == 15
}
fn test_drain_builder() {
mut sb := strings.new_builder(0)
mut target_sb := strings.new_builder(0)
assert sb.cap == 0
assert target_sb.cap == 0
sb.write_string('abc')
assert sb.len == 3
target_sb.drain_builder(mut sb, 0)
assert sb.len == 0
assert target_sb.len == 3
assert target_sb.str() == 'abc'
}