From c3671a0a3892c8545764a94b5a9646f2d2760b48 Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Tue, 4 Aug 2020 15:11:14 +0300 Subject: [PATCH] Better test30 --- src/version.ml | 2 +- stdlib/regression/test30.lama | 51 +++++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/version.ml b/src/version.ml index efb552792..8599b52b5 100644 --- a/src/version.ml +++ b/src/version.ml @@ -1 +1 @@ -let version = "Version 1.00, c73f43e81, Thu Jul 23 12:52:42 2020 +0300" +let version = "Version 1.00, c29ab4901, Sun Aug 2 23:56:21 2020 +0300" diff --git a/stdlib/regression/test30.lama b/stdlib/regression/test30.lama index 320380bf0..42fd36114 100644 --- a/stdlib/regression/test30.lama +++ b/stdlib/regression/test30.lama @@ -76,7 +76,9 @@ fun eq (x, y) { eqrec (x, y) } -fun genCyclicArrays (n) { +fun genCyclicArrays (n, eq, cross) { + local f = ref (true); + fun genrec (n, stacka, stackb, depth) { fun peek (k, stack) { case stack of @@ -115,17 +117,27 @@ fun genCyclicArrays (n) { if depth == 0 then a[i] := a; - b[i] := b + b[i] := if cross then a else b fi else case random (depth) of r -> a [i] := peek (r, stacka); - b [i] := peek (r, stackb) + b [i] := if cross then a[i] else peek (r, stackb) fi esac - fi + fi; + + if 1 - eq && deref (f) then b[i] := 0; f ::= true fi else case genrec (a[i], [a, stacka], [b, stackb], depth + 1) of [ai, bi] -> a [i] := ai; - b [i] := bi + b [i] := bi; + + if 1 - eq && deref (f) then + case b[i] of + #unboxed -> b[i] := b[i] + 1 + | _ -> b[i] := 0 + esac; + f ::= true + fi esac fi od; @@ -139,9 +151,32 @@ fun genCyclicArrays (n) { disableGC (); -for local i=0;, i<100, i:=i+1 +for local i=0;, i<25, i:=i+1 do - case genCyclicArrays (1000) of - [a, b] -> printf ("%d\n", eq (a, b)) + case genCyclicArrays (1000, true, false) of + [a, _] -> printf ("%d\n", eq (a, a) == true) + | [a, b] -> printf ("%d\n", eq (a, b) == true) + esac +od; + +for local i=0;, i<25, i:=i+1 +do + case genCyclicArrays (1000, true, true) of + [a, _] -> printf ("%d\n", eq (a, a) == true) + | [a, b] -> printf ("%d\n", eq (a, b) == true) + esac +od; + +for local i=0;, i<25, i:=i+1 +do + case genCyclicArrays (1000, false, false) of + [a, b] -> printf ("%d\n", eq (a, b) == false) + esac +od; + +for local i=0;, i<25, i:=i+1 +do + case genCyclicArrays (1000, false, true) of + [a, b] -> printf ("%d\n", eq (a, b) == false) esac od \ No newline at end of file