Mercurial > octave
diff test/integer.tst @ 28589:d5f9c8911090
* integer.tst: New tests for integer constants.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 21 Jul 2020 14:23:03 -0400 |
parents | bd51beb6205e |
children | 5b1143d1d74b |
line wrap: on
line diff
--- 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 <too many digits for binary constant> 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 <too many digits for hexadecimal constant> 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"))