discard """ action: run """ block ints: let na: int8 = -120'i8 nb: int16 = -32700'i16 nc: int32 = -2147483000'i32 nd: int64 = -9223372036854775000'i64 ne: int = -1234567 pa: int8 = 120'i8 pb: int16 = 32700'i16 pc: int32 = 2147483000'i32 pd: int64 = 9223372036854775000'i64 pe: int = 1234567 doAssert(repr(na) == "-120") doAssert(repr(nb) == "-32700") doAssert(repr(nc) == "-2147483000") doAssert(repr(nd) == "-9223372036854775000") doAssert(repr(ne) == "-1234567") doAssert(repr(pa) == "120") doAssert(repr(pb) == "32700") doAssert(repr(pc) == "2147483000") doAssert(repr(pd) == "9223372036854775000") doAssert(repr(pe) == "1234567") block uints: let a: uint8 = 254'u8 b: uint16 = 65300'u16 c: uint32 = 4294967290'u32 # d: uint64 = 18446744073709551610'u64 -> unknown node type e: uint = 1234567 doAssert(repr(a) == "254") doAssert(repr(b) == "65300") doAssert(repr(c) == "4294967290") # doAssert(repr(d) == "18446744073709551610") doAssert(repr(e) == "1234567") block floats: let a: float32 = 3.4e38'f32 b: float64 = 1.7976931348623157e308'f64 c: float = 1234.567e89 when defined js: doAssert(repr(a) == "3.4e+38") # in C: 3.399999952144364e+038 doAssert(repr(b) == "1.7976931348623157e+308") # in C: 1.797693134862316e+308 doAssert(repr(c) == "1.234567e+92") # in C: 1.234567e+092 block bools: let a: bool = true b: bool = false doAssert(repr(a) == "true") doAssert(repr(b) == "false") block enums: type AnEnum = enum aeA aeB aeC HoledEnum = enum heA = -12 heB = 15 heC = 123 doAssert(repr(aeA) == "aeA") doAssert(repr(aeB) == "aeB") doAssert(repr(aeC) == "aeC") doAssert(repr(heA) == "heA") doAssert(repr(heB) == "heB") doAssert(repr(heC) == "heC") block emums_and_unicode: #6741 type K = enum Kanji = "漢字" let kanji = Kanji doAssert(kanji == Kanji, "Enum values are not equal") doAssert($kanji == $Kanji, "Enum string values are not equal") block chars: let a = 'a' b = 'z' one = '1' nl = '\x0A' doAssert(repr(a) == "'a'") doAssert(repr(b) == "'z'") doAssert(repr(one) == "'1'") doAssert(repr(nl) == "'\\10'") block strings: let a: string = "12345" b: string = "hello,repr" c: string = "hi\nthere" when defined js: # C prepends the pointer, JS does not. doAssert(repr(a) == "\"12345\"") doAssert(repr(b) == "\"hello,repr\"") doAssert(repr(c) == "\"hi\\10there\"") block sets: let a: set[int16] = {1'i16, 2'i16, 3'i16} b: set[char] = {'A', 'k'} doAssert(repr(a) == "{1, 2, 3}") doAssert(repr(b) == "{'A', 'k'}") block ranges: let a: range[0..12] = 6 b: range[-12..0] = -6 doAssert(repr(a) == "6") doAssert(repr(b) == "-6") block tuples: type ATuple = tuple a: int b: float c: string d: OtherTuple OtherTuple = tuple a: bool b: int8 let ot: OtherTuple = (a: true, b: 120'i8) t: ATuple = (a: 42, b: 12.34, c: "tuple", d: ot) when defined js: doAssert(repr(ot) == """ [Field0 = true, Field1 = 120] """) doAssert(repr(t) == """ [Field0 = 42, Field1 = 12.34, Field2 = "tuple", Field3 = [Field0 = true, Field1 = 120]] """) block objects: type AnObj = object a: int b: float c: OtherObj OtherObj = object a: bool b: int8 let oo: OtherObj = OtherObj(a: true, b: 120'i8) o: AnObj = AnObj(a: 42, b: 12.34, c: oo) doAssert(repr(oo) == """ [a = true, b = 120] """) doAssert(repr(o) == """ [a = 42, b = 12.34, c = [a = true, b = 120]] """) block arrays: type AObj =