Files
Nim/tests/views/tdont_mutate.nim
quantimnot 6289b002b6 [Testament] Extend and document message testing aids (#19996)
* [Testament] Extend and document message testing aids

* Enable inline msgs when not reject action.
Eliminates the pain of changing the line and column numbers in `nimout`
or `output` while making changes to the test.
* Enable using inline msgs and nimout together.
Allows ease of inline msgs for the test as well as testing msgs from
other modules.
* Add path separator and test filename variable interpolation in
msgs.
Eases handling path separators in the msgs.
* Add some documentation.

* Fixed lots of broken tests

* Fixed more broken tests

* Support multiple inline messages per a line

* Fix a broken test

* Revert variable substitution in `output`

* Remove uneeded params

* Update doc/testament.md

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>

* Update testament/specs.nim

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>

* Update testament/specs.nim

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>

* Fix indentation

Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
2022-09-01 17:52:13 +02:00

59 lines
1.2 KiB
Nim

discard """
cmd: "nim check --hints:off $file"
"""
import tables
{.experimental: "views".}
const
Whitespace = {' ', '\t', '\n', '\r'}
proc split*(s: string, seps: set[char] = Whitespace, maxsplit: int = -1): Table[int, openArray[char]] #[tt.Error
^ 'result' borrows from the immutable location 's' and attempts to mutate it
]# =
var last = 0
var splits = maxsplit
result = initTable[int, openArray[char]]()
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[first] = toOpenArray(s, first, last-1)
result[first][0] = 'c'
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 otherTest(x: int) =
var y: var int = x #[tt.Error
^ 'y' borrows from the immutable location 'x' and attempts to mutate it
]#
y = 3
proc main() =
let words = split("asdf 231")
for i, x in words:
echo i, ": ", x
main()
# This has to continue to work:
type
PNode = ref object
TSrcGen = object
comStack: seq[PNode]
proc pushCom(g: var TSrcGen, n: PNode) =
setLen(g.comStack, g.comStack.len + 1)
g.comStack[^1] = n