mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 14:00:35 +00:00
some test cleanups & category reorganization (#22010)
* clean up some test categories * mention exact slice issue * magics into system * move trangechecks into overflow * move tmemory to system * try fix CI * try fix CI * final CI fix
This commit is contained in:
5
tests/proc/mdefaultprocparam.nim
Normal file
5
tests/proc/mdefaultprocparam.nim
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
|
||||
proc p*(f = (proc(): string = "hi")) =
|
||||
echo f()
|
||||
|
||||
19
tests/proc/tcolonisproc.nim
Normal file
19
tests/proc/tcolonisproc.nim
Normal file
@@ -0,0 +1,19 @@
|
||||
discard """
|
||||
output: '''
|
||||
1
|
||||
2
|
||||
'''
|
||||
"""
|
||||
|
||||
proc p(a, b: int, c: proc ()) =
|
||||
c()
|
||||
|
||||
when false:
|
||||
# language spec changed:
|
||||
p(1, 3):
|
||||
echo 1
|
||||
echo 3
|
||||
|
||||
p(1, 1, proc() =
|
||||
echo 1
|
||||
echo 2)
|
||||
90
tests/proc/tdefaultprocparam.nim
Normal file
90
tests/proc/tdefaultprocparam.nim
Normal file
@@ -0,0 +1,90 @@
|
||||
discard """
|
||||
output: '''
|
||||
hi
|
||||
hi
|
||||
topLevel|topLevel|
|
||||
topLevel2|topLevel2|
|
||||
inProc|inProc|
|
||||
inProc2|inProc2|
|
||||
topLevel|9
|
||||
topLevel2|10
|
||||
inProc|7
|
||||
inProc2|8
|
||||
must have been the wind..
|
||||
I'm there
|
||||
must have been the wind..
|
||||
I'm there
|
||||
symbol'a'symbol'a'
|
||||
symbol'b'symbol'b'
|
||||
symbol'a'symbol'b'
|
||||
symbol'a'9
|
||||
symbol'b'9
|
||||
symbol'a'0
|
||||
'''
|
||||
"""
|
||||
import mdefaultprocparam
|
||||
|
||||
p()
|
||||
|
||||
proc testP =
|
||||
p()
|
||||
|
||||
testP()
|
||||
|
||||
proc p2(s: string, count = s): string = s & count
|
||||
|
||||
proc testP2 =
|
||||
echo p2 """inProc|"""
|
||||
echo p2 """inProc2|"""
|
||||
|
||||
echo p2 """topLevel|"""
|
||||
echo p2 """topLevel2|"""
|
||||
|
||||
testP2()
|
||||
|
||||
import macros
|
||||
macro dTT(a: typed) = echo a.treeRepr
|
||||
|
||||
proc p3(s: string, count = len(s)): string = s & $count
|
||||
|
||||
proc testP3 =
|
||||
echo p3 """inProc|"""
|
||||
echo p3 """inProc2|"""
|
||||
|
||||
echo p3 """topLevel|"""
|
||||
echo p3 """topLevel2|"""
|
||||
|
||||
testP3()
|
||||
|
||||
proc cut(s: string, c = len(s)): string =
|
||||
s[0..<s.len-c]
|
||||
|
||||
echo "must have been the wind.." & cut "I'm gone"
|
||||
echo cut("I'm gone", 4) & "there"
|
||||
|
||||
proc testCut =
|
||||
echo "must have been the wind.." & cut "I'm gone"
|
||||
echo cut("I'm gone", 4) & "there"
|
||||
|
||||
testCut()
|
||||
|
||||
var a = "symbol'a'"
|
||||
var b = "symbol'b'"
|
||||
|
||||
block:
|
||||
echo p2(a)
|
||||
block:
|
||||
echo p2(b)
|
||||
block:
|
||||
echo p2(a, b)
|
||||
block:
|
||||
echo p3(a)
|
||||
echo p3(b)
|
||||
echo p3(a, 0)
|
||||
|
||||
# bug #12252
|
||||
proc foo(a = 0, b = a.high, c = high(typeof(a))) =
|
||||
discard
|
||||
|
||||
foo()
|
||||
|
||||
78
tests/proc/tlambdadonotation.nim
Normal file
78
tests/proc/tlambdadonotation.nim
Normal file
@@ -0,0 +1,78 @@
|
||||
discard """
|
||||
output: '''
|
||||
issue #11812
|
||||
issue #10899
|
||||
123
|
||||
issue #11367
|
||||
event consumed!
|
||||
'''
|
||||
"""
|
||||
|
||||
echo "issue #11812"
|
||||
|
||||
proc run(a: proc()) = a()
|
||||
|
||||
proc main() =
|
||||
var test: int
|
||||
run(proc() = test = 0)
|
||||
run do:
|
||||
test = 0
|
||||
|
||||
main()
|
||||
|
||||
|
||||
echo "issue #10899"
|
||||
|
||||
proc foo(x: proc {.closure.}) =
|
||||
x()
|
||||
|
||||
proc bar =
|
||||
var x = 123
|
||||
# foo proc = echo x #[ ok ]#
|
||||
foo: echo x #[ SIGSEGV: Illegal storage access. (Attempt to read from nil?) ]#
|
||||
|
||||
bar()
|
||||
|
||||
echo "issue #11367"
|
||||
|
||||
type
|
||||
|
||||
EventCB = proc()
|
||||
|
||||
Emitter = object
|
||||
cb: EventCB
|
||||
|
||||
Subscriber = object
|
||||
discard
|
||||
|
||||
proc newEmitter(): Emitter =
|
||||
result
|
||||
|
||||
proc on_event(self: var Emitter, cb: EventCB) =
|
||||
self.cb = cb
|
||||
|
||||
proc emit(self: Emitter) =
|
||||
self.cb()
|
||||
|
||||
proc newSubscriber(): Subscriber =
|
||||
result
|
||||
|
||||
proc consume(self: Subscriber) =
|
||||
echo "event consumed!"
|
||||
|
||||
proc main2() =
|
||||
var emitter = newEmitter()
|
||||
var subscriber = newSubscriber()
|
||||
|
||||
proc foo() =
|
||||
subscriber.consume()
|
||||
|
||||
emitter.on_event() do ():
|
||||
subscriber.consume()
|
||||
|
||||
# this works
|
||||
# emitter.on_event(foo)
|
||||
|
||||
emitter.emit()
|
||||
|
||||
main2()
|
||||
12
tests/proc/tnamedparams.nim
Normal file
12
tests/proc/tnamedparams.nim
Normal file
@@ -0,0 +1,12 @@
|
||||
discard """
|
||||
errormsg: "type mismatch: got <input: string, filename: string, line: int literal(1), col: int literal(23)>"
|
||||
file: "tnamedparams.nim"
|
||||
line: 8
|
||||
"""
|
||||
import pegs
|
||||
|
||||
discard parsePeg(
|
||||
input = "input",
|
||||
filename = "filename",
|
||||
line = 1,
|
||||
col = 23)
|
||||
15
tests/proc/tnamedparams2.nim
Normal file
15
tests/proc/tnamedparams2.nim
Normal file
@@ -0,0 +1,15 @@
|
||||
import pegs
|
||||
|
||||
discard parsePeg(
|
||||
pattern = "input",
|
||||
filename = "filename",
|
||||
line = 1,
|
||||
col = 23)
|
||||
|
||||
# bug #12196
|
||||
type
|
||||
Renderer = object
|
||||
|
||||
var xs0, x0, xs1, x1: int
|
||||
proc init(xs=xs0; x=x0; renderer: Renderer; r: byte) = discard
|
||||
init(xs=xs1, x=x1, r=3, renderer=Renderer())
|
||||
10
tests/proc/tnamedparams3.nim
Normal file
10
tests/proc/tnamedparams3.nim
Normal file
@@ -0,0 +1,10 @@
|
||||
discard """
|
||||
errormsg: "type mismatch: got <int literal(5), b: bool>"
|
||||
line: 10
|
||||
"""
|
||||
|
||||
# bug #2993
|
||||
proc test(i: int, a, b: bool) = discard
|
||||
#test(5, b = false) #Missing param a
|
||||
|
||||
5.test(b = false) #Missing param a
|
||||
120
tests/proc/tparamsindefault.nim
Normal file
120
tests/proc/tparamsindefault.nim
Normal file
@@ -0,0 +1,120 @@
|
||||
discard """
|
||||
output: '''
|
||||
@[1, 2, 3]@[1, 2, 3]
|
||||
a
|
||||
a
|
||||
1
|
||||
3 is an int
|
||||
2 is an int
|
||||
miau is a string
|
||||
f1 1 1 1
|
||||
f1 2 3 3
|
||||
f1 10 20 30
|
||||
f2 100 100 100
|
||||
f2 200 300 300
|
||||
f2 300 400 400
|
||||
f3 10 10 20
|
||||
f3 10 15 25
|
||||
true true
|
||||
false true
|
||||
world
|
||||
typedescDefault
|
||||
'''
|
||||
"""
|
||||
|
||||
template reject(x) =
|
||||
assert(not compiles(x))
|
||||
|
||||
block:
|
||||
# https://github.com/nim-lang/Nim/issues/7756
|
||||
proc foo[T](x: seq[T], y: seq[T] = x) =
|
||||
echo x, y
|
||||
|
||||
let a = @[1, 2, 3]
|
||||
foo(a)
|
||||
|
||||
block:
|
||||
# https://github.com/nim-lang/Nim/issues/1201
|
||||
proc issue1201(x: char|int = 'a') = echo x
|
||||
|
||||
issue1201()
|
||||
issue1201('a')
|
||||
issue1201(1)
|
||||
|
||||
# https://github.com/nim-lang/Nim/issues/7000
|
||||
proc test(a: int|string = 2) =
|
||||
when a is int:
|
||||
echo a, " is an int"
|
||||
elif a is string:
|
||||
echo a, " is a string"
|
||||
|
||||
test(3) # works
|
||||
test() # works
|
||||
test("miau")
|
||||
|
||||
block:
|
||||
# https://github.com/nim-lang/Nim/issues/3002 and similar
|
||||
proc f1(a: int, b = a, c = b) =
|
||||
echo "f1 ", a, " ", b, " ", c
|
||||
|
||||
proc f2(a: int, b = a, c: int = b) =
|
||||
echo "f2 ", a, " ", b, " ", c
|
||||
|
||||
proc f3(a: int, b = a, c = a + b) =
|
||||
echo "f3 ", a, " ", b, " ", c
|
||||
|
||||
f1 1
|
||||
f1(2, 3)
|
||||
f1 10, 20, 30
|
||||
100.f2
|
||||
200.f2 300
|
||||
300.f2(400)
|
||||
|
||||
10.f3()
|
||||
10.f3(15)
|
||||
|
||||
reject:
|
||||
# This is a type mismatch error:
|
||||
proc f4(a: int, b = a, c: float = b) = discard
|
||||
|
||||
reject:
|
||||
# undeclared identifier
|
||||
proc f5(a: int, b = c, c = 10) = discard
|
||||
|
||||
reject:
|
||||
# undeclared identifier
|
||||
proc f6(a: int, b = b) = discard
|
||||
|
||||
reject:
|
||||
# undeclared identifier
|
||||
proc f7(a = a) = discard
|
||||
|
||||
block:
|
||||
proc f(a: var int, b: ptr int, c = addr(a)) =
|
||||
echo addr(a) == b, " ", b == c
|
||||
|
||||
var x = 10
|
||||
f(x, addr(x))
|
||||
f(x, nil, nil)
|
||||
|
||||
block:
|
||||
# https://github.com/nim-lang/Nim/issues/1046
|
||||
proc pySubstr(s: string, start: int, endd = s.len()): string =
|
||||
var
|
||||
revStart = start
|
||||
revEnd = endd
|
||||
|
||||
if start < 0:
|
||||
revStart = s.len() + start
|
||||
if endd < 0:
|
||||
revEnd = s.len() + endd
|
||||
|
||||
return s[revStart .. revEnd-1]
|
||||
|
||||
echo pySubstr("Hello world", -5)
|
||||
|
||||
|
||||
# bug #11660
|
||||
|
||||
func typedescDefault(T: typedesc; arg: T = 0) = debugEcho "typedescDefault"
|
||||
typedescDefault(int)
|
||||
39
tests/proc/tprocvar.nim
Normal file
39
tests/proc/tprocvar.nim
Normal file
@@ -0,0 +1,39 @@
|
||||
discard """
|
||||
output: '''
|
||||
papbpcpdpe7
|
||||
'''
|
||||
"""
|
||||
|
||||
block genericprocvar:
|
||||
proc foo[T](thing: T) =
|
||||
discard thing
|
||||
var a: proc (thing: int) {.nimcall.} = foo[int]
|
||||
|
||||
|
||||
block tprocvar2:
|
||||
proc pa() {.cdecl.} = write(stdout, "pa")
|
||||
proc pb() {.cdecl.} = write(stdout, "pb")
|
||||
proc pc() {.cdecl.} = write(stdout, "pc")
|
||||
proc pd() {.cdecl.} = write(stdout, "pd")
|
||||
proc pe() {.cdecl.} = write(stdout, "pe")
|
||||
|
||||
const algos = [pa, pb, pc, pd, pe]
|
||||
var x: proc (a, b: int): int {.cdecl.}
|
||||
|
||||
proc ha(c, d: int): int {.cdecl.} =
|
||||
echo(c + d)
|
||||
result = c + d
|
||||
|
||||
for a in items(algos):
|
||||
a()
|
||||
|
||||
x = ha
|
||||
discard x(3, 4)
|
||||
|
||||
|
||||
block tprocvars:
|
||||
proc doSomething(v: int, x: proc(v:int):int): int = return x(v)
|
||||
proc doSomething(v: int, x: proc(v:int)) = x(v)
|
||||
|
||||
doAssert doSomething(10, proc(v: int): int = return v div 2) == 5
|
||||
|
||||
18
tests/proc/tprocvarmismatch.nim
Normal file
18
tests/proc/tprocvarmismatch.nim
Normal file
@@ -0,0 +1,18 @@
|
||||
discard """
|
||||
errormsg: "type mismatch"
|
||||
line: 17
|
||||
file: "tprocvarmismatch.nim"
|
||||
"""
|
||||
|
||||
type
|
||||
TCallback = proc (a, b: int)
|
||||
|
||||
proc huh(x, y: var int) =
|
||||
x = 0
|
||||
y = x+1
|
||||
|
||||
proc so(c: TCallback) =
|
||||
c(2, 4)
|
||||
|
||||
so(huh)
|
||||
|
||||
Reference in New Issue
Block a user