123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- discard """
- joinable: false
- cmd: "nim c $options -d:booldef -d:booldef2=false -d:intdef=2 -d:strdef=foobar -d:namespaced.define=false -d:double.namespaced.define -r $file"
- matrix: "; -d:useGenericDefine"
- """
- when defined(useGenericDefine):
- {.pragma: booldefine2, define.}
- {.pragma: intdefine2, define.}
- {.pragma: strdefine2, define.}
- else:
-
- {.pragma: booldefine2, booldefine.}
- {.pragma: intdefine2, intdefine.}
- {.pragma: strdefine2, strdefine.}
- const booldef {.booldefine2.} = false
- const booldef2 {.booldefine2.} = true
- const intdef {.intdefine2.} = 0
- const strdef {.strdefine2.} = ""
- doAssert defined(booldef)
- doAssert defined(booldef2)
- doAssert defined(intdef)
- doAssert defined(strdef)
- doAssert booldef
- doAssert not booldef2
- doAssert intdef == 2
- doAssert strdef == "foobar"
- when defined(useGenericDefine):
- block:
- const uintdef {.define: "intdef".}: uint = 17
- doAssert intdef == int(uintdef)
- const cstrdef {.define: "strdef".}: cstring = "not strdef"
- doAssert $cstrdef == strdef
- type FooBar = enum foo, bar, foobar
- const enumdef {.define: "strdef".} = foo
- doAssert $enumdef == strdef
- doAssert enumdef == foobar
- # Intentionally not defined from command line
- const booldef3 {.booldefine2.} = true
- const intdef2 {.intdefine2.} = 1
- const strdef2 {.strdefine2.} = "abc"
- type T = object
- when booldef3:
- field1: int
- when intdef2 == 1:
- field2: int
- when strdef2 == "abc":
- field3: int
- doAssert not defined(booldef3)
- doAssert not defined(intdef2)
- doAssert not defined(strdef2)
- discard T(field1: 1, field2: 2, field3: 3)
- doAssert defined(namespaced.define)
- const `namespaced.define` {.booldefine2.} = true
- doAssert not `namespaced.define`
- when defined(useGenericDefine):
- const aliasToNamespacedDefine {.define: "namespaced.define".} = not `namespaced.define`
- else:
- const aliasToNamespacedDefine {.booldefine: "namespaced.define".} = not `namespaced.define`
- doAssert aliasToNamespacedDefine == `namespaced.define`
- doAssert defined(double.namespaced.define)
- const `double.namespaced.define` {.booldefine2.} = false
- doAssert `double.namespaced.define`
- when defined(useGenericDefine):
- const aliasToDoubleNamespacedDefine {.define: "double.namespaced.define".} = not `double.namespaced.define`
- else:
- const aliasToDoubleNamespacedDefine {.booldefine: "double.namespaced.define".} = not `double.namespaced.define`
- doAssert aliasToDoubleNamespacedDefine == `double.namespaced.define`
- doAssert not defined(namespaced.butnotdefined)
|