mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-21 23:05:27 +00:00
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import std/private/miscdollars
|
||||
import std/strutils
|
||||
from std/os import getEnv
|
||||
|
||||
template flakyAssert*(cond: untyped, msg = "", notifySuccess = true) =
|
||||
@@ -26,15 +25,29 @@ template flakyAssert*(cond: untyped, msg = "", notifySuccess = true) =
|
||||
msg2.add $expr & " " & msg
|
||||
echo msg2
|
||||
|
||||
proc greedyOrderedSubsetLines*(lhs, rhs: string): bool =
|
||||
## returns true if each stripped line in `lhs` appears in rhs, using a greedy matching.
|
||||
let rhs = rhs.strip
|
||||
var currentPos = 0
|
||||
for line in lhs.strip.splitLines:
|
||||
currentPos = rhs.find(line.strip, currentPos)
|
||||
if currentPos < 0:
|
||||
return false
|
||||
return true
|
||||
when not defined(js):
|
||||
import std/strutils
|
||||
|
||||
proc greedyOrderedSubsetLines*(lhs, rhs: string): bool =
|
||||
## Returns true if each stripped line in `lhs` appears in rhs, using a greedy matching.
|
||||
iterator splitLinesClosure(): string {.closure.} =
|
||||
for line in splitLines(rhs.strip):
|
||||
yield line
|
||||
|
||||
var rhsIter = splitLinesClosure
|
||||
var currentLine = strip(rhsIter())
|
||||
|
||||
for line in lhs.strip.splitLines:
|
||||
let line = line.strip
|
||||
if line.len != 0:
|
||||
while line != currentLine:
|
||||
currentLine = strip(rhsIter())
|
||||
if rhsIter.finished:
|
||||
return false
|
||||
|
||||
if rhsIter.finished:
|
||||
return false
|
||||
return true
|
||||
|
||||
template enableRemoteNetworking*: bool =
|
||||
## Allows contolling whether to run some test at a statement-level granularity.
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
discard """
|
||||
ccodecheck: "baz"
|
||||
targets: "c"
|
||||
ccodecheck: "baz"
|
||||
"""
|
||||
|
||||
proc foo(): void {.exportc: "bar".}=
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
discard """
|
||||
errormsg: "undeclared identifier: 'undeclared'"
|
||||
line: 8
|
||||
column: 7
|
||||
errormsg: "undeclared identifier: 'undeclared'"
|
||||
targets: "c"
|
||||
line: 9
|
||||
column: 7
|
||||
"""
|
||||
|
||||
# test should fail because the line directive is wrong
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
discard """
|
||||
errormsg: "wrong error message"
|
||||
line: 8
|
||||
column: 6
|
||||
errormsg: "wrong error message"
|
||||
targets: "c"
|
||||
line: 9
|
||||
column: 6
|
||||
"""
|
||||
|
||||
# test should fail because the line directive is wrong
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
discard """
|
||||
exitcode: 1
|
||||
targets: "c"
|
||||
exitcode: 1
|
||||
"""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
discard """
|
||||
errormsg: "undeclared identifier: 'undefined'"
|
||||
file: "notthisfile.nim"
|
||||
targets: "c"
|
||||
errormsg: "undeclared identifier: 'undefined'"
|
||||
file: "notthisfile.nim"
|
||||
"""
|
||||
|
||||
echo undefined
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
discard """
|
||||
errormsg: "undeclared identifier: 'undeclared'"
|
||||
line: 9
|
||||
column: 6
|
||||
targets: "c"
|
||||
errormsg: "undeclared identifier: 'undeclared'"
|
||||
line: 10
|
||||
column: 6
|
||||
"""
|
||||
|
||||
# test should fail because the line directive is wrong
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
discard """
|
||||
maxcodesize: 1
|
||||
targets: "c"
|
||||
maxcodesize: 1
|
||||
"""
|
||||
|
||||
echo "Hello World"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
discard """
|
||||
nimout: "Hello World!"
|
||||
action: compile
|
||||
targets: "c"
|
||||
nimout: "Hello World!"
|
||||
action: compile
|
||||
"""
|
||||
|
||||
static:
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
discard """
|
||||
output: '''
|
||||
done
|
||||
'''
|
||||
targets: "c"
|
||||
output: '''
|
||||
done
|
||||
'''
|
||||
"""
|
||||
|
||||
echo "broken"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
discard """
|
||||
outputsub: "something else"
|
||||
outputsub: "something else"
|
||||
targets: "c"
|
||||
"""
|
||||
|
||||
echo "Hello World!"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
discard """
|
||||
action: "reject"
|
||||
action: "reject"
|
||||
targets: "c"
|
||||
"""
|
||||
|
||||
# Because we set action="reject", we expect this line not to compile. But the
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
discard """
|
||||
sortoutput: true
|
||||
output: '''
|
||||
2
|
||||
1
|
||||
'''
|
||||
sortoutput: true
|
||||
targets: "c"
|
||||
output: '''
|
||||
2
|
||||
1
|
||||
'''
|
||||
"""
|
||||
|
||||
# this test should ensure that the output is actually sorted
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
discard """
|
||||
timeout: "0.1"
|
||||
targets: "c"
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
discard """
|
||||
valgrind: true
|
||||
cmd: "nim $target --gc:arc -d:useMalloc $options $file"
|
||||
valgrind: true
|
||||
targets: "c"
|
||||
cmd: "nim $target --gc:arc -d:useMalloc $options $file"
|
||||
"""
|
||||
|
||||
# this is the same check used by testament/specs.nim whether or not valgrind
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
discard """
|
||||
cmd: "nim c --expandMacro:foo $file"
|
||||
nimout: '''Hint: expanded macro:
|
||||
nimout: '''texpandmacro.nim(17, 1) Hint: expanded macro:
|
||||
echo ["injected echo"]
|
||||
var x = 4 [ExpandMacro]
|
||||
'''
|
||||
|
||||
@@ -2,7 +2,7 @@ discard """
|
||||
cmd: "nim check $file"
|
||||
errormsg: "type mismatch: got <AsyncHttpServer, Port, proc (req: Request): Future[system.void]{.locks: <unknown>.}>"
|
||||
nimout: '''
|
||||
type mismatch: got <AsyncHttpServer, Port, proc (req: Request): Future[system.void]{.locks: <unknown>.}>
|
||||
tgcsafety.nim(30, 18) Error: type mismatch: got <AsyncHttpServer, Port, proc (req: Request): Future[system.void]{.locks: <unknown>.}>
|
||||
but expected one of:
|
||||
proc serve(server: AsyncHttpServer; port: Port;
|
||||
callback: proc (request: Request): Future[void] {.closure, gcsafe.};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
discard """
|
||||
errormsg: "in expression ' do:"
|
||||
nimout: '''
|
||||
Error: in expression ' do:
|
||||
twrongcolon.nim(11, 12) Error: in expression ' do:
|
||||
890': identifier expected, but found ''
|
||||
'''
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
discard """
|
||||
nimout: "Special variable 'result' is shadowed. [ResultShadowed]"
|
||||
nimout: "tresultwarning.nim(6, 7) Warning: Special variable 'result' is shadowed. [ResultShadowed]"
|
||||
"""
|
||||
|
||||
proc test(): string =
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
discard """
|
||||
nimout: "Warning: use explicit initialization of 'y' for clarity [Uninit]"
|
||||
nimout: "tuninit1.nim(35, 11) Warning: use explicit initialization of 'y' for clarity [Uninit]"
|
||||
line:34
|
||||
action: compile
|
||||
"""
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
discard """
|
||||
nimout: "Warning: cannot prove that field 'x.s' is accessible [ProveField]"
|
||||
nimout: "tcheckedfield1.nim(40, 6) Warning: cannot prove that field 'x.s' is accessible [ProveField]"
|
||||
line:51
|
||||
action: run
|
||||
output: "abc abc"
|
||||
|
||||
18
tests/pragmas/thintprocessing.nim
Normal file
18
tests/pragmas/thintprocessing.nim
Normal file
@@ -0,0 +1,18 @@
|
||||
discard """
|
||||
disabled: windows
|
||||
matrix: "--hint:processing"
|
||||
nimout: '''
|
||||
compile start
|
||||
..
|
||||
warn_module.nim(6, 6) Hint: 'test' is declared but not used [XDeclaredButNotUsed]
|
||||
compile end
|
||||
'''
|
||||
"""
|
||||
|
||||
static:
|
||||
echo "compile start"
|
||||
|
||||
import warn_module
|
||||
|
||||
static:
|
||||
echo "compile end"
|
||||
@@ -1,8 +1,6 @@
|
||||
discard """
|
||||
matrix: "--hint:processing"
|
||||
nimout: '''
|
||||
compile start
|
||||
..
|
||||
warn_module.nim(6, 6) Hint: 'test' is declared but not used [XDeclaredButNotUsed]
|
||||
compile end
|
||||
'''
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
discard """
|
||||
targets: "c cpp js"
|
||||
matrix: "; --gc:arc"
|
||||
matrix: "--gc:refc; --gc:arc"
|
||||
"""
|
||||
|
||||
from std/sugar import collect
|
||||
|
||||
@@ -4,3 +4,8 @@ block: # greedyOrderedSubsetLines
|
||||
doAssert greedyOrderedSubsetLines("a1\na3", "a0\na1\na2\na3\na4")
|
||||
doAssert not greedyOrderedSubsetLines("a3\na1", "a0\na1\na2\na3\na4") # out of order
|
||||
doAssert not greedyOrderedSubsetLines("a1\na5", "a0\na1\na2\na3\na4") # a5 not in lhs
|
||||
|
||||
doAssert not greedyOrderedSubsetLines("a1\na5", "a0\na1\na2\na3\na4\nprefix:a5")
|
||||
doAssert not greedyOrderedSubsetLines("a1\na5", "a0\na1\na2\na3\na4\na5:suffix")
|
||||
doAssert not greedyOrderedSubsetLines("a5", "a0\na1\na2\na3\na4\nprefix:a5")
|
||||
doAssert not greedyOrderedSubsetLines("a5", "a0\na1\na2\na3\na4\na5:suffix")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
discard """
|
||||
errormsg: "type mismatch: got <int>"
|
||||
line: 17
|
||||
nimout: '''type mismatch: got <int>
|
||||
nimout: '''tprevent_forloopvar_mutations.nim(17, 7) Error: type mismatch: got <int>
|
||||
but expected one of:
|
||||
proc inc[T: Ordinal](x: var T; y = 1)
|
||||
first type mismatch at position: 1
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
discard """
|
||||
nimout: '''2
|
||||
nimout: '''
|
||||
2
|
||||
3
|
||||
4:2
|
||||
Got Hi
|
||||
Got Hey
|
||||
'''
|
||||
output:'''
|
||||
a
|
||||
b
|
||||
c'''
|
||||
c
|
||||
'''
|
||||
"""
|
||||
|
||||
# bug #404
|
||||
|
||||
@@ -19,6 +19,7 @@ foo4
|
||||
(a: 0, b: 0)
|
||||
'''
|
||||
"""
|
||||
import std/sets
|
||||
|
||||
#bug #1009
|
||||
type
|
||||
@@ -95,8 +96,6 @@ static: simpleTryFinally()
|
||||
|
||||
# bug #10981
|
||||
|
||||
import sets
|
||||
|
||||
proc main =
|
||||
for i in 0..<15:
|
||||
var someSets = @[initHashSet[int]()]
|
||||
|
||||
Reference in New Issue
Block a user