[MLton-commit] r6990

Matthew Fluet fluet at mlton.org
Wed Nov 12 15:11:30 PST 2008


Regression tests that access the current stack in heap via MLton.size and MLton.share object traces.
----------------------------------------------------------------------

A   mlton/trunk/regression/thread-switch-share.ok
A   mlton/trunk/regression/thread-switch-share.sml
A   mlton/trunk/regression/thread-switch-size.ok
A   mlton/trunk/regression/thread-switch-size.sml

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

Added: mlton/trunk/regression/thread-switch-share.ok
===================================================================
--- mlton/trunk/regression/thread-switch-share.ok	2008-11-12 18:23:29 UTC (rev 6989)
+++ mlton/trunk/regression/thread-switch-share.ok	2008-11-12 23:11:29 UTC (rev 6990)
@@ -0,0 +1,2 @@
+size1 >= size2 = true
+sum1 = sum2 = true
\ No newline at end of file

Added: mlton/trunk/regression/thread-switch-share.sml
===================================================================
--- mlton/trunk/regression/thread-switch-share.sml	2008-11-12 18:23:29 UTC (rev 6989)
+++ mlton/trunk/regression/thread-switch-share.sml	2008-11-12 23:11:29 UTC (rev 6990)
@@ -0,0 +1,39 @@
+(* Access the current stack in the heap via a MLton.share object trace. *)
+val rt : MLton.Thread.Runnable.t option ref = ref NONE
+
+fun stats () =
+   let
+      val () = MLton.share rt
+   in
+      ()
+   end
+
+fun switcheroo () =
+   MLton.Thread.switch
+   (fn t => let
+               val () = rt := SOME (MLton.Thread.prepare (t, ()))
+               val () = stats ()
+            in
+               valOf (!rt)
+            end)
+
+(* tuple option array *)
+val a = Array.tabulate (100, fn i => SOME (i mod 2, i mod 3))
+val () = Array.update (a, 0, NONE)
+
+fun touch () =
+   let
+      val size = MLton.size a
+      val sum =
+         Array.foldr (fn (NONE,sum) => sum
+                       | (SOME (a, b),sum) => a + b + sum)
+                     0 a
+   in
+      (size, sum)
+   end
+
+val (size1,sum1) = touch ()
+val () = switcheroo ()
+val (size2,sum2) = touch ()
+val _ = print (concat ["size1 >= size2 = ", Bool.toString (size1 >= size2), "\n"])
+val _ = print (concat ["sum1 = sum2 = ", Bool.toString (sum1 >= sum2), "\n"])

Added: mlton/trunk/regression/thread-switch-size.ok
===================================================================
--- mlton/trunk/regression/thread-switch-size.ok	2008-11-12 18:23:29 UTC (rev 6989)
+++ mlton/trunk/regression/thread-switch-size.ok	2008-11-12 23:11:29 UTC (rev 6990)
@@ -0,0 +1 @@
+!rs > 0 = true

Added: mlton/trunk/regression/thread-switch-size.sml
===================================================================
--- mlton/trunk/regression/thread-switch-size.sml	2008-11-12 18:23:29 UTC (rev 6989)
+++ mlton/trunk/regression/thread-switch-size.sml	2008-11-12 23:11:29 UTC (rev 6990)
@@ -0,0 +1,22 @@
+(* Access the current stack in the heap via a MLton.size object trace. *)
+val rt : MLton.Thread.Runnable.t option ref = ref NONE
+val rs : int ref = ref 0
+
+fun stats () =
+   let
+      val () = rs := MLton.size rt
+   in
+      ()
+   end
+
+fun switcheroo () =
+   MLton.Thread.switch
+   (fn t => let
+               val () = rt := SOME (MLton.Thread.prepare (t, ()))
+               val () = stats ()
+            in
+               valOf (!rt)
+            end)
+
+val () = switcheroo ()
+val _ = print (concat ["!rs > 0 = ", Bool.toString (!rs > 0), "\n"])




More information about the MLton-commit mailing list