diff options
Diffstat (limited to 'tests/views/tsplit_into_seq.nim')
-rw-r--r-- | tests/views/tsplit_into_seq.nim | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/views/tsplit_into_seq.nim b/tests/views/tsplit_into_seq.nim new file mode 100644 index 000000000..a0861458b --- /dev/null +++ b/tests/views/tsplit_into_seq.nim @@ -0,0 +1,41 @@ +discard """ + output: '''asdf +asdf +231 +231 +''' + cmd: "nim c --gc:orc $file" +""" + +{.experimental: "views".} + +const + Whitespace = {' ', '\t', '\n', '\r'} + +proc split*(s: string, seps: set[char] = Whitespace, + maxsplit: int = -1): seq[openArray[char]] = + var last = 0 + var splits = maxsplit + result = @[] + + while last <= len(s): + var first = last + while last < len(s) and s[last] notin seps: + inc(last) + if splits == 0: last = len(s) + result.add toOpenArray(s, first, last-1) + result.add toOpenArray(s, first, last-1) + if splits == 0: break + dec(splits) + inc(last) + +proc `$`(x: openArray[char]): string = + result = newString(x.len) + for i in 0..<x.len: result[i] = x[i] + +proc main() = + let words = split("asdf 231") + for x in words: + echo x + +main() |