[m-rev.] diff: add test of uint{16, 64} to decimal string conversion

Julien Fischer jfischer at opturion.com
Sun Oct 31 17:17:33 AEDT 2021


Add tests of uint{16,64} to decimal string conversion.

This is to support upcoming changes to how these conversions are implemented.

tests/hard_coded/uint{16,64}_to_string.{m,exp}:
     Add the new tests.

tests/hard_coded/uint32_to_string.m:
     Adjust a comment.

tests/hard_coded/Mmakefile:
    Add the new tests.

Julien.

diff --git a/tests/hard_coded/Mmakefile b/tests/hard_coded/Mmakefile
index af4ab31..465020d 100644
--- a/tests/hard_coded/Mmakefile
+++ b/tests/hard_coded/Mmakefile
@@ -459,6 +459,7 @@ ORDINARY_PROGS = \
  	uc_export_enum \
  	uint16_from_bytes \
  	uint16_switch_test \
+	uint16_to_string \
  	uint32_from_bytes \
  	uint32_switch_test \
  	uint32_to_string \
@@ -467,6 +468,7 @@ ORDINARY_PROGS = \
  	uint64_ground_term \
  	uint64_string_conv \
  	uint64_switch_test \
+	uint64_to_string \
  	uint8_switch_test \
  	uint_string_conv \
  	uint_switch_test \
diff --git a/tests/hard_coded/uint16_to_string.exp b/tests/hard_coded/uint16_to_string.exp
new file mode 100644
index 0000000..691483f
--- /dev/null
+++ b/tests/hard_coded/uint16_to_string.exp
@@ -0,0 +1,28 @@
+0
+1
+2
+7
+8
+9
+10
+11
+99
+100
+101
+126
+127
+128
+254
+255
+256
+999
+1000
+1001
+9999
+10000
+10001
+32766
+32767
+32768
+65534
+65535
diff --git a/tests/hard_coded/uint16_to_string.m b/tests/hard_coded/uint16_to_string.m
new file mode 100644
index 0000000..73025c5
--- /dev/null
+++ b/tests/hard_coded/uint16_to_string.m
@@ -0,0 +1,68 @@
+%---------------------------------------------------------------------------%
+% vim: ft=mercury ts=4 sw=4 et
+%---------------------------------------------------------------------------%
+%
+% A test of uint16 to decimal string conversion.
+%
+%---------------------------------------------------------------------------%
+
+:- module uint16_to_string.
+:- interface.
+
+:- import_module io.
+
+:- pred main(io::di, io::uo) is det.
+
+%---------------------------------------------------------------------------%
+%---------------------------------------------------------------------------%
+
+:- implementation.
+
+:- import_module list.
+:- import_module string.
+:- import_module uint16.
+
+%---------------------------------------------------------------------------%
+
+main(!IO) :-
+    P = (pred(U::in, !.IO::di, !:IO::uo) is det :-
+        io.print_line(uint16_to_string(U), !IO)
+    ),
+    list.foldl(P, test_numbers, !IO).
+
+:- func test_numbers = list(uint16).
+
+test_numbers = [
+    0u16,
+    1u16,
+    2u16,
+    7u16,
+    8u16,
+    9u16,
+    10u16,
+    11u16,
+    99u16,
+    100u16,
+    101u16,
+    126u16,  % max_int8 - 1
+    127u16,  % max_int8
+    128u16,  % max_int8 + 1
+    254u16,  % max_uint8 - 1
+    255u16,  % max_uint8
+    256u16,  % max_uint8 + 1
+    999u16,
+    1000u16,
+    1001u16,
+    9999u16,
+    10000u16,
+    10001u16,
+    32766u16, % max_int16 - 1
+    32767u16, % max_int16
+    32768u16, % max_int16 + 1,
+    65534u16, % max_uint16 - 1
+    65535u16  % max_uint16
+].
+
+%---------------------------------------------------------------------------%
+:- end_module uint16_to_string.
+%---------------------------------------------------------------------------%
diff --git a/tests/hard_coded/uint32_to_string.m b/tests/hard_coded/uint32_to_string.m
index ee8df01..9d7e6a8 100644
--- a/tests/hard_coded/uint32_to_string.m
+++ b/tests/hard_coded/uint32_to_string.m
@@ -2,7 +2,7 @@
  % vim: ft=mercury ts=4 sw=4 et
  %---------------------------------------------------------------------------%
  %
-% A test of uint32 to string conversion.
+% A test of uint32 to decimal string conversion.
  %
  %---------------------------------------------------------------------------%

diff --git a/tests/hard_coded/uint64_to_string.exp b/tests/hard_coded/uint64_to_string.exp
new file mode 100644
index 0000000..efbbde0
--- /dev/null
+++ b/tests/hard_coded/uint64_to_string.exp
@@ -0,0 +1,93 @@
+0
+1
+2
+4
+7
+8
+9
+10
+11
+15
+16
+31
+32
+64
+99
+100
+101
+126
+127
+128
+254
+255
+256
+999
+1000
+1001
+1023
+1024
+9999
+10000
+10001
+32766
+32767
+32768
+65534
+65535
+65536
+99999
+100000
+100001
+999999
+1000000
+1000001
+9999999
+10000000
+10000001
+99999999
+100000000
+100000001
+999999999
+1000000000
+1000000001
+2147483646
+2147483647
+2147483648
+4294967294
+4294967295
+4294967296
+9999999999
+10000000000
+10000000001
+99999999999
+100000000000
+100000000001
+999999999999
+1000000000000
+1000000000001
+9999999999999
+10000000000000
+10000000000001
+99999999999999
+100000000000000
+100000000000001
+999999999999999
+1000000000000000
+1000000000000001
+9999999999999999
+10000000000000000
+10000000000000001
+99999999999999999
+100000000000000000
+100000000000000001
+999999999999999999
+1000000000000000000
+1000000000000000001
+9223372036854775806
+9223372036854775807
+9223372036854775808
+9999999999999999999
+10000000000000000000
+10000000000000000001
+18446744073709551614
+18446744073709551615
diff --git a/tests/hard_coded/uint64_to_string.m b/tests/hard_coded/uint64_to_string.m
new file mode 100644
index 0000000..24c952c
--- /dev/null
+++ b/tests/hard_coded/uint64_to_string.m
@@ -0,0 +1,134 @@
+%---------------------------------------------------------------------------%
+% vim: ft=mercury ts=4 sw=4 et
+%---------------------------------------------------------------------------%
+%
+% A test of uint64 to decimal string conversion.
+%
+%---------------------------------------------------------------------------%
+
+:- module uint64_to_string.
+:- interface.
+
+:- import_module io.
+
+:- pred main(io::di, io::uo) is det.
+
+%---------------------------------------------------------------------------%
+%---------------------------------------------------------------------------%
+
+:- implementation.
+
+:- import_module int64.
+:- import_module list.
+:- import_module string.
+:- import_module uint64.
+
+%---------------------------------------------------------------------------%
+
+main(!IO) :-
+    P = (pred(U::in, !.IO::di, !:IO::uo) is det :-
+        io.print_line(uint64_to_string(U), !IO)
+    ),
+    list.foldl(P, test_numbers, !IO).
+
+:- func test_numbers = list(uint64).
+
+test_numbers = [
+    0u64,
+    1u64,
+    2u64,
+    4u64,
+    7u64,
+    8u64,
+    9u64,
+    10u64,
+    11u64,
+    15u64,
+    16u64,
+    31u64,
+    32u64,
+    64u64,
+    99u64,
+    100u64,
+    101u64,
+    126u64, % max_int8 - 1
+    127u64, % max_int8
+    128u64, % max_int8 + 1
+    254u64, % max_uint8 - 1
+    255u64, % max_uint8
+    256u64, % max_uint8 + 1
+    999u64,
+    1000u64,
+    1001u64,
+    1023u64,
+    1024u64,
+    9999u64,
+    10000u64,
+    10001u64,
+    32766u64, % max_int16 - 1
+    32767u64, % max_int16
+    32768u64, % max_int16 + 1
+    65534u64, % max_uint16 - 1
+    65535u64, % max_uint16
+    65536u64, % max_uint16 + 1
+    99999u64,
+    100000u64,
+    100001u64,
+    999999u64,
+    1000000u64,
+    1000001u64,
+    9999999u64,
+    10000000u64,
+    10000001u64,
+    99999999u64,
+    100000000u64,
+    100000001u64,
+    999999999u64,
+    1000000000u64,
+    1000000001u64,
+    2147483646u64,  % max_int32 - 1
+    2147483647u64,  % max_int32
+    2147483648u64,  % max_int32 + 1
+    4294967294u64,  % max_uint32 - 1
+    4294967295u64,  % max_uint32
+    4294967296u64,  % max_uint32 + 1
+    9999999999u64,
+    10000000000u64,
+    10000000001u64,
+    99999999999u64,
+    100000000000u64,
+    100000000001u64,
+    999999999999u64,
+    1000000000000u64,
+    1000000000001u64,
+    9999999999999u64,
+    10000000000000u64,
+    10000000000001u64,
+    99999999999999u64,
+    100000000000000u64,
+    100000000000001u64,
+    999999999999999u64,
+    1000000000000000u64,
+    1000000000000001u64,
+    9999999999999999u64,
+    10000000000000000u64,
+    10000000000000001u64,
+    99999999999999999u64,
+    100000000000000000u64,
+    100000000000000001u64,
+    999999999999999999u64,
+    1000000000000000000u64,
+    1000000000000000001u64,
+    9223372036854775806u64, % max_int64 - 1
+    9223372036854775807u64, % max_int64
+    9223372036854775808u64, % max_int64 + 1
+    9999999999999999999u64,
+    10000000000000000000u64,
+    10000000000000000001u64,
+    18446744073709551614u64, % max_uint64 - 1
+    18446744073709551615u64  % max_uint64
+].
+
+%---------------------------------------------------------------------------%
+:- end_module uint64_to_string.
+%---------------------------------------------------------------------------%


More information about the reviews mailing list