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") var empty: NimNode var myLit = newLit("str") assert( (empty or myLit) == myLit ) empty = newEmptyNode() assert( (empty or myLit) == myLit ) proc bottom(): NimNode = quit("may not be evaluated") assert( (myLit or bottom()) == myLit )