# HG changeset patch # User John W. Eaton # Date 1595355783 14400 # Node ID d5f9c8911090abf8cb04bb1c55376b9e893f507d # Parent ee9b1081471f4bd8fd7144e04475ed594ef4498a * integer.tst: New tests for integer constants. diff -r ee9b1081471f -r d5f9c8911090 test/integer.tst --- a/test/integer.tst Mon Jul 20 17:43:16 2020 -0400 +++ b/test/integer.tst Tue Jul 21 14:23:03 2020 -0400 @@ -50,3 +50,98 @@ %! xdiv = clsmax / 0.5; %! assert (xdiv, clsmax); %! endfor + +## Tests for binary constants +%!assert (0b1, uint8 (2^0)) +%!assert (0b10000000, uint8 (2^7)) +%!assert (0b11111111, intmax ("uint8")) +%!assert (0b100000000, uint16 (2^8)) +%!assert (0b1000000000000000, uint16 (2^15)) +%!assert (0b1111111111111111, intmax ("uint16")) +%!assert (0b10000000000000000, uint32 (2^16)) +%!assert (0b10000000000000000000000000000000, uint32 (2^31)) +%!assert (0b11111111111111111111111111111111, intmax ("uint32")) +%!assert (0b100000000000000000000000000000000, uint64 (2^32)) +%!assert (0b1000000000000000000000000000000000000000000000000000000000000000, uint64 (2^63)) +%!assert (0b1111111111111111111111111111111111111111111111111111111111111111, intmax ("uint64")) +%!error eval ("0b11111111111111111111111111111111111111111111111111111111111111111") + +%!assert (0b1u16, uint16 (2^0)) +%!assert (0b10000000u16, uint16 (2^7)) + +%!assert (0b1u32, uint32 (2^0)) +%!assert (0b10000000u32, uint32 (2^7)) +%!assert (0b1000000000000000u32, uint32 (2^15)) + +%!assert (0b1u64, uint64 (2^0)) +%!assert (0b10000000u64, uint64 (2^7)) +%!assert (0b1000000000000000u64, uint64 (2^15)) +%!assert (0b10000000000000000000000000000000u64, uint64 (2^31)) + +%!assert (0b1s16, int16 (2^0)) +%!assert (0b10000000s16, int16 (2^7)) + +%!assert (0b1s32, int32 (2^0)) +%!assert (0b10000000s32, int32 (2^7)) +%!assert (0b1000000000000000s32, int32 (2^15)) + +%!assert (0b1s64, int64 (2^0)) +%!assert (0b10000000s64, int64 (2^7)) +%!assert (0b1000000000000000s64, int64 (2^15)) +%!assert (0b10000000000000000000000000000000s64, int64 (2^31)) + +## Tests for hexadecimal constants +%!assert (0x1, uint8 (2^0)) +%!assert (0x80, uint8 (2^7)) +%!assert (0xff, intmax ("uint8")) +%!assert (0x100, uint16 (2^8)) +%!assert (0x8000, uint16 (2^15)) +%!assert (0xffff, intmax ("uint16")) +%!assert (0x10000, uint32 (2^16)) +%!assert (0x80000000, uint32 (2^31)) +%!assert (0xffffffff, intmax ("uint32")) +%!assert (0x100000000, uint64 (2^32)) +%!assert (0x8000000000000000, uint64 (2^63)) +%!assert (0xffffffffffffffff, intmax ("uint64")) +%!error eval ("0xfffffffffffffffff") + +%!assert (0x1u16, uint16 (2^0)) +%!assert (0x80u16, uint16 (2^7)) + +%!assert (0x1u32, uint32 (2^0)) +%!assert (0x80u32, uint32 (2^7)) +%!assert (0x8000u32, uint32 (2^15)) + +%!assert (0x1u64, uint64 (2^0)) +%!assert (0x80u64, uint64 (2^7)) +%!assert (0x8000u64, uint64 (2^15)) +%!assert (0x80000000u64, uint64 (2^31)) + +%!assert (0x1s16, int16 (2^0)) +%!assert (0x80s16, int16 (2^7)) + +%!assert (0x1s32, int32 (2^0)) +%!assert (0x80s32, int32 (2^7)) +%!assert (0x8000s32, int32 (2^15)) + +%!assert (0x1s64, int64 (2^0)) +%!assert (0x80s64, int64 (2^7)) +%!assert (0x8000s64, int64 (2^15)) +%!assert (0x80000000s64, int64 (2^31)) + +## Tests for decimal constants with extreme values + +%!assert (uint64 (9007199254740992), uint64 (flintmax ())) +%!assert (int64 (9007199254740992), int64 (flintmax ())) +%!assert (uint64 (-9007199254740992), uint64 (-flintmax ())) +%!assert (int64 (-9007199254740992), int64 (-flintmax ())) + +%!assert (uint64 (9007199254740993), uint64 (flintmax ())+1) +%!assert (int64 (9007199254740993), int64 (flintmax ())+1) +%!assert (uint64 (-9007199254740993), uint64 (-flintmax ())-1) +%!assert (int64 (-9007199254740993), int64 (-flintmax ())-1) + +%!assert (uint64 (18446744073709551615), intmax ("uint64")) + +%!assert (int64 (9223372036854775807), intmax ("int64")) +%!assert (int64 (-9223372036854775808), intmin ("int64"))