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

strings.textscanner: add .current/0, .peek_back/0, .peek_back_n/1 and .goto_end/1 methods

This commit is contained in:
Delyan Angelov
2021-06-20 12:38:14 +03:00
parent ce3681ee8f
commit a21ee1abd4
2 changed files with 105 additions and 1 deletions

View File

@@ -89,6 +89,36 @@ fn test_back_n() {
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`
@@ -98,3 +128,32 @@ fn test_reset() {
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`
}