1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- discard """
- targets: "c cpp js"
- """
- #[
- if https://github.com/nim-lang/Nim/pull/14043 is merged (or at least its
- tests/system/tostring.nim diff subset), merge
- tests/system/tostring.nim into this file, named after dollars.nim
- The goal is to increase test coverage across backends while minimizing test code
- duplication (which always results in weaker test coverage in practice).
- ]#
- import std/unittest
- template test[T](a: T, expected: string) =
- check $a == expected
- var b = a
- check $b == expected
- static:
- doAssert $a == expected
- template testType(T: typedesc) =
- when T is bool:
- test true, "true"
- test false, "false"
- elif T is char:
- test char, "\0"
- test char.high, static($T.high)
- else:
- test T.default, "0"
- test 1.T, "1"
- test T.low, static($T.low)
- test T.high, static($T.high)
- block: # `$`(SomeInteger)
- # direct tests
- check $0'u8 == "0"
- check $255'u8 == "255"
- check $(-127'i8) == "-127"
- # known limitation: Error: number out of range: '128'i8',
- # see https://github.com/timotheecour/Nim/issues/125
- # check $(-128'i8) == "-128"
- check $int8.low == "-128"
- check $int8(-128) == "-128"
- when not defined js: # pending https://github.com/nim-lang/Nim/issues/14127
- check $cast[int8](-128) == "-128"
- var a = 12345'u16
- check $a == "12345"
- check $12345678'u64 == "12345678"
- check $12345678'i64 == "12345678"
- check $(-12345678'i64) == "-12345678"
- # systematic tests
- testType uint8
- testType uint16
- testType uint32
- testType uint
- testType int8
- testType int16
- testType int32
- testType int
- testType bool
- when not defined(js): # requires BigInt support
- testType uint64
- testType int64
- testType BiggestInt
- block: # #14350 for JS
- var cstr: cstring
- doAssert cstr == cstring(nil)
- doAssert cstr == nil
- doAssert cstr.isNil
- doAssert cstr != cstring("")
|