changeset 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 ee9b1081471f
children 5b1143d1d74b
files test/integer.tst
diffstat 1 files changed, 95 insertions(+), 0 deletions(-) [+]
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"))