mirror of
https://github.com/vlang/v.git
synced 2025-08-04 02:07:28 -04:00
217 lines
4.1 KiB
V
217 lines
4.1 KiB
V
import strings.textscanner
|
|
|
|
fn test_remaining() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.remaining() == 3
|
|
s.next()
|
|
s.next()
|
|
assert s.remaining() == 1
|
|
s.next()
|
|
assert s.remaining() == 0
|
|
s.next()
|
|
s.next()
|
|
assert s.remaining() == 0
|
|
s.reset()
|
|
assert s.remaining() == 3
|
|
}
|
|
|
|
fn test_next() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.next() == `a`
|
|
assert s.next() == `b`
|
|
assert s.next() == `c`
|
|
assert s.next() == -1
|
|
assert s.next() == -1
|
|
assert s.next() == -1
|
|
}
|
|
|
|
fn test_skip() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.next() == `a`
|
|
s.skip()
|
|
assert s.next() == `c`
|
|
assert s.next() == -1
|
|
|
|
s.reset()
|
|
assert s.peek() == `a`
|
|
s.skip()
|
|
assert s.peek() == `b`
|
|
s.skip()
|
|
assert s.peek() == `c`
|
|
s.skip()
|
|
assert s.peek() == -1
|
|
}
|
|
|
|
fn test_skip_n() {
|
|
mut s := textscanner.new('abc')
|
|
s.skip_n(2)
|
|
assert s.next() == `c`
|
|
assert s.next() == -1
|
|
|
|
s.reset()
|
|
assert s.peek() == `a`
|
|
s.skip_n(2)
|
|
assert s.peek() == `c`
|
|
s.skip_n(2)
|
|
assert s.peek() == -1
|
|
|
|
s.reset()
|
|
assert s.peek() == `a`
|
|
s.skip_n(3)
|
|
assert s.peek() == -1
|
|
|
|
s.reset()
|
|
assert s.peek() == `a`
|
|
s.skip_n(4)
|
|
assert s.peek() == -1
|
|
}
|
|
|
|
fn test_peek() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.peek() == `a`
|
|
assert s.peek() == `a`
|
|
assert s.peek() == `a`
|
|
|
|
assert s.next() == `a`
|
|
assert s.next() == `b`
|
|
assert s.next() == `c`
|
|
assert s.next() == -1
|
|
}
|
|
|
|
fn test_peek_n() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.peek_n(0) == `a`
|
|
assert s.peek_n(1) == `b`
|
|
assert s.peek_n(2) == `c`
|
|
assert s.peek_n(3) == -1
|
|
assert s.peek_n(4) == -1
|
|
|
|
assert s.next() == `a`
|
|
assert s.next() == `b`
|
|
assert s.next() == `c`
|
|
assert s.next() == -1
|
|
}
|
|
|
|
fn test_back() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.next() == `a`
|
|
s.back()
|
|
assert s.next() == `a`
|
|
assert s.next() == `b`
|
|
s.back()
|
|
assert s.next() == `b`
|
|
assert s.next() == `c`
|
|
assert s.next() == -1
|
|
}
|
|
|
|
fn test_back_n() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.next() == `a`
|
|
s.back_n(10)
|
|
assert s.next() == `a`
|
|
assert s.next() == `b`
|
|
assert s.next() == `c`
|
|
s.back_n(2)
|
|
assert s.next() == `b`
|
|
}
|
|
|
|
fn test_peek_back() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.next() == `a`
|
|
assert s.next() == `b`
|
|
// check that calling .peek_back() multiple times
|
|
// does not change the state:
|
|
assert s.peek_back() == `a`
|
|
assert s.peek_back() == `a`
|
|
assert s.peek_back() == `a`
|
|
// advance, then peek_back again:
|
|
assert s.next() == `c`
|
|
assert s.peek_back() == `b`
|
|
// peeking before the start:
|
|
s.reset()
|
|
assert s.peek_back() == -1
|
|
// peeking right at the end:
|
|
s.goto_end()
|
|
assert s.peek_back() == `b`
|
|
}
|
|
|
|
fn test_peek_back_n() {
|
|
mut s := textscanner.new('abc')
|
|
s.goto_end()
|
|
assert s.peek_back_n(0) == `c`
|
|
assert s.peek_back_n(1) == `b`
|
|
assert s.peek_back_n(2) == `a`
|
|
assert s.peek_back_n(3) == -1
|
|
assert s.peek_back_n(4) == -1
|
|
}
|
|
|
|
fn test_reset() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.next() == `a`
|
|
s.next()
|
|
s.next()
|
|
assert s.next() == -1
|
|
s.reset()
|
|
assert s.next() == `a`
|
|
}
|
|
|
|
fn test_current() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.current() == -1
|
|
assert s.next() == `a`
|
|
assert s.current() == `a`
|
|
assert s.current() == `a`
|
|
assert s.peek_back() == -1
|
|
assert s.next() == `b`
|
|
assert s.current() == `b`
|
|
assert s.current() == `b`
|
|
assert s.peek_back() == `a`
|
|
assert s.next() == `c`
|
|
assert s.current() == `c`
|
|
assert s.next() == -1
|
|
assert s.current() == `c`
|
|
assert s.next() == -1
|
|
assert s.current() == `c`
|
|
s.reset()
|
|
assert s.current() == -1
|
|
assert s.next() == `a`
|
|
assert s.current() == `a`
|
|
}
|
|
|
|
fn test_goto_end() {
|
|
mut s := textscanner.new('abc')
|
|
s.goto_end()
|
|
assert s.current() == `c`
|
|
}
|
|
|
|
fn test_skip_whitespace() {
|
|
mut s := textscanner.new('abc d \n xyz')
|
|
assert s.current() == -1
|
|
assert s.next() == `a`
|
|
assert s.next() == `b`
|
|
assert s.next() == `c`
|
|
s.skip_whitespace()
|
|
assert s.next() == `d`
|
|
s.skip_whitespace()
|
|
assert s.next() == `x`
|
|
assert s.next() == `y`
|
|
assert s.next() == `z`
|
|
}
|
|
|
|
fn test_peek_u8() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.peek_u8() == `a`
|
|
assert !s.peek_u8().is_digit()
|
|
assert s.next() == `a`
|
|
assert s.peek_u8() == `b`
|
|
}
|
|
|
|
fn test_peek_n_u8() {
|
|
mut s := textscanner.new('abc')
|
|
assert s.peek_n_u8(0) == `a`
|
|
assert s.peek_n_u8(1) == `b`
|
|
assert s.peek_n_u8(2) == `c`
|
|
assert s.peek_n_u8(3) == 0
|
|
assert s.peek_n_u8(4) == 0
|
|
}
|