summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mosmllib/test/packreallittle.sml75
-rw-r--r--src/mosmllib/test/result.ok54
-rw-r--r--src/mosmllib/test/test.sml3
3 files changed, 122 insertions, 10 deletions
diff --git a/src/mosmllib/test/packreallittle.sml b/src/mosmllib/test/packreallittle.sml
new file mode 100644
index 0000000..3bd29ef
--- /dev/null
+++ b/src/mosmllib/test/packreallittle.sml
@@ -0,0 +1,75 @@
+use "auxil.sml";
+load "PackRealLittle";
+local
+ structure P = PackRealLittle
+ fun hex w = StringCvt.padLeft #"0" 2 (Word8.fmt StringCvt.HEX w)
+ fun pow n i =
+ let fun loop 0 acc = acc
+ | loop i acc = loop (i-1) (n * acc)
+ in loop i 1
+ end
+in
+
+fun roundtrip r =
+ let val packed = P.toBytes r
+ val endian = if P.isBigEndian then "(big endian)\n"
+ else "(little endian)\n"
+ in app print [" ", Real.fmt (StringCvt.FIX NONE) r, " is enconded as "]
+ ; Word8Vector.app (fn w => app print [hex w, " "]) packed
+ ; print endian
+ ; Real.== (r, P.fromBytes packed)
+ end
+
+val test_roundtrip =
+ check'(fn _ =>
+ List.all roundtrip
+ [~420.0,
+ ~1.1,
+ ~0.123456789,
+ ~0.0,
+ 0.0,
+ 1.0,
+ 1.1,
+ 2.0,
+ 420E6,
+ real (valOf Int.maxInt),
+ real (pow 2 53 - 1),
+ real (pow 2 53),
+ real (pow 2 53 + 1),
+ Math.pi,
+ Math.e]);
+
+val encoded =
+ [0wx40, 0wx09, 0wx21, 0wxFB, 0wx54, 0wx44, 0wx2D, 0wx18,
+ 0wx40, 0wx09, 0wx21, 0wxFB, 0wx54, 0wx44, 0wx2D, 0wx18]
+
+val test_subvec =
+ let val encoded = Word8Vector.fromList encoded
+ in check'(fn _ => Real.== (P.subVec(encoded, 0),
+ P.subVec(encoded, 1)))
+ end;
+
+val test_subarr =
+ let val encoded = Word8Array.fromList encoded
+ in check'(fn _ => Real.== (P.subArr(encoded, 0),
+ P.subArr(encoded, 1)))
+ end;
+
+val test_update0 =
+ let val encoded = Word8Array.fromList encoded
+ in check'(fn _ =>
+ ( P.update(encoded, 0, 0.0)
+ ; Real.== (P.subArr(encoded, 0),
+ 0.0)
+ ))
+ end;
+
+val test_update1 =
+ let val encoded = Word8Array.fromList encoded
+ in check'(fn _ =>
+ ( P.update(encoded, 1, 1.0)
+ ; Real.== (P.subArr(encoded, 1),
+ 1.0)
+ ))
+ end;
+end
diff --git a/src/mosmllib/test/result.ok b/src/mosmllib/test/result.ok
index b2d76aa..159b5bb 100644
--- a/src/mosmllib/test/result.ok
+++ b/src/mosmllib/test/result.ok
@@ -438,15 +438,15 @@ Enter `quit();' to quit.
> val checkrange = fn : int * int -> (int -> bool) -> string
[closing file "auxil.sml"]
> val it = () : unit
-VARYING: This is (local time) now: Fri Jul 2 20:31:32 2021
-VARYING: This is UTC now: Fri Jul 2 18:31:32 2021
-VARYING: This is an hour from now: Fri Jul 2 21:31:32 2021
-VARYING: This is a day from now: Sat Jul 3 20:31:32 2021
-VARYING: This is a week from now: Fri Jul 9 20:31:32 2021
-VARYING: This is 120 days from now: Sat Oct 30 20:31:32 2021
-VARYING: This is 160 days from now: Thu Dec 9 19:31:32 2021
-VARYING: This is 200 days from now: Tue Jan 18 19:31:32 2022
-VARYING: This is 240 days from now: Sun Feb 27 19:31:32 2022
+VARYING: This is (local time) now: Fri Jul 2 20:59:07 2021
+VARYING: This is UTC now: Fri Jul 2 18:59:07 2021
+VARYING: This is an hour from now: Fri Jul 2 21:59:07 2021
+VARYING: This is a day from now: Sat Jul 3 20:59:07 2021
+VARYING: This is a week from now: Fri Jul 9 20:59:07 2021
+VARYING: This is 120 days from now: Sat Oct 30 20:59:07 2021
+VARYING: This is 160 days from now: Thu Dec 9 19:59:07 2021
+VARYING: This is 200 days from now: Tue Jan 18 19:59:07 2022
+VARYING: This is 240 days from now: Sun Feb 27 19:59:07 2022
VARYING: This is the epoch (UTC): Thu Jan 1 00:00:00 1970
The UTC millenium (UTC time): Sat Jan 1 00:00:00 2000
The UTC millenium (UTC time): Sat Jan 1 00:00:00 2000
@@ -2146,4 +2146,40 @@ VARYING: /////////////////////////////////////
val test_update0 = "OK" : string
val test_update1 = "OK" : string
[closing file "packrealbig.sml"]
+[opening file "packreallittle.sml"]
+[opening file "auxil.sml"]
+> infix 1 seq
+ val ('b, 'c) seq = fn : 'b * 'c -> 'c
+> val check = fn : bool -> string
+> val check' = fn : (unit -> bool) -> string
+> val range = fn : int * int -> (int -> bool) -> bool
+> val checkrange = fn : int * int -> (int -> bool) -> string
+[closing file "auxil.sml"]
+> val it = () : unit
+> val it = () : unit
+ ~420.000000 is enconded as 00 00 00 00 00 40 7A C0 (little endian)
+ ~1.100000 is enconded as 9A 99 99 99 99 99 F1 BF (little endian)
+ ~0.123457 is enconded as 5F 63 39 37 DD 9A BF BF (little endian)
+ 0.000000 is enconded as 00 00 00 00 00 00 00 00 (little endian)
+ 0.000000 is enconded as 00 00 00 00 00 00 00 00 (little endian)
+ 1.000000 is enconded as 00 00 00 00 00 00 F0 3F (little endian)
+ 1.100000 is enconded as 9A 99 99 99 99 99 F1 3F (little endian)
+ 2.000000 is enconded as 00 00 00 00 00 00 00 40 (little endian)
+ 420000000.000000 is enconded as 00 00 00 00 B1 08 B9 41 (little endian)
+ 4611686018427387904.000000 is enconded as 00 00 00 00 00 00 D0 43 (little endian)
+ 9007199254740991.000000 is enconded as FF FF FF FF FF FF 3F 43 (little endian)
+ 9007199254740992.000000 is enconded as 00 00 00 00 00 00 40 43 (little endian)
+ 9007199254740992.000000 is enconded as 00 00 00 00 00 00 40 43 (little endian)
+ 3.141593 is enconded as 18 2D 44 54 FB 21 09 40 (little endian)
+ 2.718282 is enconded as 69 57 14 8B 0A BF 05 40 (little endian)
+> val roundtrip = fn : real -> bool
+ val test_roundtrip = "OK" : string
+ val encoded =
+ [0wx40, 0wx9, 0wx21, 0wxFB, 0wx54, 0wx44, 0wx2D, 0wx18, 0wx40, 0wx9, 0wx21,
+ 0wxFB, 0wx54, 0wx44, 0wx2D, 0wx18] : word8 list
+ val test_subvec = "OK" : string
+ val test_subarr = "OK" : string
+ val test_update0 = "OK" : string
+ val test_update1 = "OK" : string
+[closing file "packreallittle.sml"]
> val it = () : unit
diff --git a/src/mosmllib/test/test.sml b/src/mosmllib/test/test.sml
index 560f1e7..1ddae63 100644
--- a/src/mosmllib/test/test.sml
+++ b/src/mosmllib/test/test.sml
@@ -39,7 +39,8 @@ app use
"word8arrayslice.sml",
"word8vector.sml",
"word8vectorslice.sml",
- "packrealbig.sml"
+ "packrealbig.sml",
+ "packreallittle.sml"
];
ignore(Process.exit Process.success);