diff options
Diffstat (limited to 'tests/int')
-rw-r--r-- | tests/int/t1.nim | 47 | ||||
-rw-r--r-- | tests/int/tints.nim | 8 | ||||
-rw-r--r-- | tests/int/tunsignedinc.nim | 6 | ||||
-rw-r--r-- | tests/int/twrongexplicitvarconv.nim | 16 | ||||
-rw-r--r-- | tests/int/twrongvarconv.nim | 9 |
5 files changed, 85 insertions, 1 deletions
diff --git a/tests/int/t1.nim b/tests/int/t1.nim index 36402da07..6e5cdc8d4 100644 --- a/tests/int/t1.nim +++ b/tests/int/t1.nim @@ -1,3 +1,7 @@ +discard """ + targets: "c cpp" +""" + doAssert typeOf(1.int64 + 1.int) is int64 doAssert typeOf(1.uint64 + 1.uint) is uint64 doAssert int64 is SomeNumber @@ -12,3 +16,46 @@ doAssert typeOf(myInt16 + myInt) is int # of type `int` doAssert typeOf(myInt16 + 2i32) is int32 # of type `int32` doAssert int32 isnot int64 doAssert int32 isnot int + +block: # bug #23947 + template foo = + let test_u64 : uint64 = 0xFF07.uint64 + let test_u8 : uint8 = test_u64.uint8 + # Error: illegal conversion from '65287' to '[0..255]' + doAssert test_u8 == 7 + + static: foo() + foo() + +block: + # bug #22085 + const + x = uint32(uint64.high) # vm error + u = uint64.high + v = uint32(u) # vm error + + let + z = uint64.high + y = uint32(z) # runtime ok + + let + w = uint32(uint64.high) # semfold error + + doAssert x == w + doAssert v == y + + # bug #14522 + doAssert 0xFF000000_00000000.uint64 == 18374686479671623680'u64 + +block: # bug #23954 + let testRT_u8 : uint8 = 0x107.uint8 + doAssert testRT_u8 == 7 + const testCT_u8 : uint8 = 0x107.uint8 + doAssert testCT_u8 == 7 + +block: # issue #24104 + type P = distinct uint # uint, uint8, uint16, uint32, uint64 + let v = 0.P + case v + of 0.P: discard + else: discard diff --git a/tests/int/tints.nim b/tests/int/tints.nim index a7d27d736..773e8ccad 100644 --- a/tests/int/tints.nim +++ b/tests/int/tints.nim @@ -1,5 +1,5 @@ discard """ - matrix: "; --backend:js --jsbigint64:off; --backend:js --jsbigint64:on" + matrix: "; --backend:js --jsbigint64:off -d:nimStringHash2; --backend:js --jsbigint64:on" output: ''' 0 0 0 0 @@ -7,6 +7,7 @@ Success''' """ # Test the different integer operations + import std/private/jsutils var testNumber = 0 @@ -141,4 +142,9 @@ block: # shl when not defined(js) or (defined(js) and compileOption("jsbigint64")): doAssert u64 shl 1 == u64 - 1 +block: # bug #23378 + var neg = -1 # prevent compile-time evaluation + let n = abs BiggestInt neg + doAssert n == 1 + echo("Success") #OUT Success diff --git a/tests/int/tunsignedinc.nim b/tests/int/tunsignedinc.nim index 9d1a4bbb4..9392f1b74 100644 --- a/tests/int/tunsignedinc.nim +++ b/tests/int/tunsignedinc.nim @@ -32,3 +32,9 @@ block t4175: const j = 0u - 1u doAssert i == j doAssert j + 1u == 0u + +block: # https://forum.nim-lang.org/t/12465#76998 + var a: int = 1 + var x: uint8 = 1 + a.inc(x) # Error: type mismatch + doAssert a == 2 diff --git a/tests/int/twrongexplicitvarconv.nim b/tests/int/twrongexplicitvarconv.nim new file mode 100644 index 000000000..79f770e8e --- /dev/null +++ b/tests/int/twrongexplicitvarconv.nim @@ -0,0 +1,16 @@ +discard """ + action: reject + nimout: ''' + but expression 'int(a)' is immutable, not 'var' +''' +""" + +proc `++`(n: var int) = + n += 1 + +var a: int32 = 15 + +++int(a) #[tt.Error +^ type mismatch: got <int>]# + +echo a diff --git a/tests/int/twrongvarconv.nim b/tests/int/twrongvarconv.nim new file mode 100644 index 000000000..db6ac2c53 --- /dev/null +++ b/tests/int/twrongvarconv.nim @@ -0,0 +1,9 @@ +proc `++`(n: var int) = + n += 1 + +var a: int32 = 15 + +++a #[tt.Error +^ type mismatch: got <int32>]# + +echo a |