| 1 | // vtest build: present_node? |
| 2 | import strings |
| 3 | |
| 4 | type MyInt = int |
| 5 | |
| 6 | const maxn = 100000 |
| 7 | |
| 8 | fn 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 | |
| 49 | fn 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 | |
| 67 | fn 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 | |
| 80 | fn 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 | |
| 88 | fn 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 | |