[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