81 lines
2.1 KiB
Nim
81 lines
2.1 KiB
Nim
import macros
|
|
|
|
from uri import `/`
|
|
|
|
macro test*(a: untyped): untyped =
|
|
var nodes: tuple[a, b: int]
|
|
nodes.a = 4
|
|
nodes[1] = 45
|
|
|
|
type
|
|
TTypeEx = object
|
|
x, y: int
|
|
case b: bool
|
|
of false: nil
|
|
of true: z: float
|
|
|
|
var t: TTypeEx
|
|
t.b = true
|
|
t.z = 4.5
|
|
|
|
|
|
test:
|
|
"hi"
|
|
|
|
import strutils
|
|
|
|
template assertNot(arg: untyped): untyped =
|
|
assert(not(arg))
|
|
|
|
|
|
proc foo(arg: int): void =
|
|
discard
|
|
|
|
proc foo(arg: float): void =
|
|
discard
|
|
|
|
static:
|
|
## test eqIdent
|
|
let a = "abc_def"
|
|
let b = "abcDef"
|
|
let c = "AbcDef"
|
|
let d = nnkBracketExpr.newTree() # not an identifier at all
|
|
|
|
assert eqIdent( a , b )
|
|
assert eqIdent(newIdentNode(a), b )
|
|
assert eqIdent( a , newIdentNode(b))
|
|
assert eqIdent(newIdentNode(a), newIdentNode(b))
|
|
|
|
assert eqIdent( a , b )
|
|
assert eqIdent(genSym(nskLet, a), b )
|
|
assert eqIdent( a , genSym(nskLet, b))
|
|
assert eqIdent(genSym(nskLet, a), genSym(nskLet, b))
|
|
|
|
assert eqIdent(newIdentNode( a), newIdentNode( b))
|
|
assert eqIdent(genSym(nskLet, a), newIdentNode( b))
|
|
assert eqIdent(newIdentNode( a), genSym(nskLet, b))
|
|
assert eqIdent(genSym(nskLet, a), genSym(nskLet, b))
|
|
|
|
assertNot eqIdent( c , b )
|
|
assertNot eqIdent(newIdentNode(c), b )
|
|
assertNot eqIdent( c , newIdentNode(b))
|
|
assertNot eqIdent(newIdentNode(c), newIdentNode(b))
|
|
|
|
assertNot eqIdent( c , b )
|
|
assertNot eqIdent(genSym(nskLet, c), b )
|
|
assertNot eqIdent( c , genSym(nskLet, b))
|
|
assertNot eqIdent(genSym(nskLet, c), genSym(nskLet, b))
|
|
|
|
assertNot eqIdent(newIdentNode( c), newIdentNode( b))
|
|
assertNot eqIdent(genSym(nskLet, c), newIdentNode( b))
|
|
assertNot eqIdent(newIdentNode( c), genSym(nskLet, b))
|
|
assertNot eqIdent(genSym(nskLet, c), genSym(nskLet, b))
|
|
|
|
# eqIdent on non identifier at all
|
|
assertNot eqIdent(a,d)
|
|
|
|
# eqIdent on sym choice
|
|
let fooSym = bindSym"foo"
|
|
assert fooSym.kind in {nnkOpenSymChoice, nnkClosedSymChoice}
|
|
assert fooSym.eqIdent("fOO")
|
|
assertNot fooSym.eqIdent("bar")
|