[MLton-commit] r5826

Matthew Fluet fluet at mlton.org
Mon Aug 6 14:25:05 PDT 2007


Regression test from Sean McLaughllin demonstrating that String.fromString doesn't follow current rounding mode
----------------------------------------------------------------------

A   mlton/trunk/regression/real-str.ok
A   mlton/trunk/regression/real-str.sml

----------------------------------------------------------------------

Added: mlton/trunk/regression/real-str.ok
===================================================================
--- mlton/trunk/regression/real-str.ok	2007-08-05 12:32:54 UTC (rev 5825)
+++ mlton/trunk/regression/real-str.ok	2007-08-06 21:25:04 UTC (rev 5826)
@@ -0,0 +1,9 @@
+YES
+BFB999999999999A
+BFB9999999999999
+YES
+BFB999999999999A
+BFB9999999999999
+YES
+3FB999999999999A
+3FB999999999999A

Added: mlton/trunk/regression/real-str.sml
===================================================================
--- mlton/trunk/regression/real-str.sml	2007-08-05 12:32:54 UTC (rev 5825)
+++ mlton/trunk/regression/real-str.sml	2007-08-06 21:25:04 UTC (rev 5826)
@@ -0,0 +1,38 @@
+  structure I = IEEEReal
+  structure R = Real
+  structure V = Word8Vector
+  structure P = PackRealBig
+
+  fun down() = I.setRoundingMode I.TO_NEGINF
+  fun up() = I.setRoundingMode I.TO_POSINF
+
+  fun word8vectorToString v = V.foldr (fn(w,s) => Word8.toString w ^ s) "" v
+
+  val _ = down()
+  val x = ~1.0/10.0
+  val _ = up()
+  val y = ~1.0/10.0
+  val _ = if R.<=(x,y) then print "YES\n" else print "NO\n"
+  val _ = print(word8vectorToString (P.toBytes x) ^ "\n")
+  val _ = print(word8vectorToString (P.toBytes y) ^ "\n")
+
+  val s = "~0.1"
+  val _ = down()
+  val x = Option.valOf (Real.fromString s)
+  val _ = up()
+  val y = Option.valOf (Real.fromString s)
+  val _ = if R.<=(x,y) then print "YES\n" else print "NO\n"
+  val _ = print(word8vectorToString (P.toBytes x) ^ "\n")
+  val _ = print(word8vectorToString (P.toBytes y) ^ "\n")
+
+  val da = {class = IEEEReal.NORMAL,
+            sign = false,
+            digits = [1],
+            exp = 0}
+  val _ = down()
+  val x = Option.valOf (Real.fromDecimal da)
+  val _ = up()
+  val y = Option.valOf (Real.fromDecimal da)
+  val _ = if R.<=(x,y) then print "YES\n" else print "NO\n"
+  val _ = print(word8vectorToString (P.toBytes x) ^ "\n")
+  val _ = print(word8vectorToString (P.toBytes y) ^ "\n")




More information about the MLton-commit mailing list