1
0
Fork 0
mirror of https://github.com/Reuh/anselme.git synced 2025-10-27 16:49:31 +00:00

Final test batch and associated fixes

This commit is contained in:
Étienne Fildadut 2023-12-31 19:41:14 +01:00
parent 050c84921c
commit 43a745a7a9
66 changed files with 1233 additions and 51 deletions

View file

@ -0,0 +1,20 @@
--# run #--
--- text ---
| {}"1,2: " {}"*[1, 2]" {}"" |
--- text ---
| {}"1,2,3: " {}"*[1, 2, 3]" {}"" |
--- text ---
| {}"1,2,3,4: " {}"*[1, 2, 3, 4]" {}"" |
--- text ---
| {}"1,2,3,4,5: " {}"*[1, 2, 3, 4, 5]" {}"" |
--- error ---
cancel merge
↳ from test/tests/checkpoint merging mutable value.ans:24:6 in call: error("cancel merge")
↳ from ? in block: :l = *[1, 2]…
--# post run check #--
--- text ---
| {}"1,2,3,4: " {}"*[1, 2, 3, 4]" {}"" |
--- return ---
()
--# saved #--
{}

View file

@ -0,0 +1,20 @@
--# run #--
--- text ---
| {}"1: " {}"1" {}"" |
--- text ---
| {}"2: " {}"2" {}"" |
--- text ---
| {}"3: " {}"3" {}"" |
--- text ---
| {}"4: " {}"4" {}"" |
--- error ---
cancel merge
↳ from test/tests/checkpoint merging variable.ans:24:6 in call: error("cancel merge")
↳ from ? in block: :l = 1…
--# post run check #--
--- text ---
| {}"3: " {}"3" {}"" |
--- return ---
()
--# saved #--
{}

21
test/results/commit.ans Normal file
View file

@ -0,0 +1,21 @@
--# run #--
--- text ---
| {}"before: " {}"2" {}"" |
--# parallel script #--
--- text ---
| {}"parallel: " {}"5" {}"" |
--- return ---
()
--# main script #--
--- text ---
| {}"after: " {}"2" {}"" |
--# parallel script #--
--- text ---
| {}"parallel: " {}"2" {}"" |
--- return ---
()
--# main script #--
--- return ---
()
--# saved #--
{"bar.checkpoint":#foo, "bar.reached":*{#foo:1}, "bar.run":1}

View file

@ -0,0 +1,10 @@
--# run #--
--- wait ---
5
--- text ---
| {}"ah" |
| {}"ho" |
--- return ---
()
--# saved #--
{}

View file

@ -5,7 +5,7 @@
--- text ---
| {}"" {}"42" {}"" |
--- error ---
identifier "z" is undefined in branch 6843ee85-cea8-445d-10f21-9a8e54372094
identifier "z" is undefined in branch 1228bcf1-5118-4955-10048-8fda790007be
↳ from test/tests/exported variable nested.ans:12:3 in identifier: z
↳ from test/tests/exported variable nested.ans:12:1 in text interpolation: | {z} |
↳ from test/tests/exported variable nested.ans:12:1 in translatable: | {z} |

View file

@ -0,0 +1,7 @@
--# run #--
--- error ---
a function with parameters (a, b) is already defined in the overload
↳ from test/tests/function conflict.ans:5:1 in definition: :f = ($(a, b) 0)
↳ from ? in block: :f = ($(a, b) 0)…
--# saved #--
{}

View file

@ -0,0 +1,15 @@
--# run #--
--- text ---
| {}"a" |
--- text ---
| {}"b" |
--- text ---
| {}"c" |
--- text ---
| {}"a" |
--- text ---
| {}"b" |
--- return ---
()
--# saved #--
{"a.checkpoint":false, "a.run":2, "b.checkpoint":false, "b.run":2, "c.checkpoint":false, "c.run":1}

View file

@ -0,0 +1,15 @@
--# run #--
--- text ---
| {}"a" |
--- text ---
| {}"b" |
--- text ---
| {}"c" |
--- text ---
| {}"c" |
--- text ---
| {}"c" |
--- return ---
()
--# saved #--
{"a.checkpoint":false, "a.run":1, "b.checkpoint":false, "b.run":1, "c.checkpoint":false, "c.run":3}

View file

@ -0,0 +1,15 @@
--# run #--
--- text ---
| {}"c" |
--- text ---
| {}"a" |
--- text ---
| {}"c" |
--- text ---
| {}"a" |
--- text ---
| {}"b" |
--- return ---
()
--# saved #--
{"a.checkpoint":false, "a.run":2, "b.checkpoint":false, "b.run":1, "c.checkpoint":false, "c.run":2}

View file

@ -1,6 +1,6 @@
--# run #--
--- error ---
identifier "b" is undefined in branch 0a138a38-3faa-4478-10f6f-1a9de1e0a8e1
identifier "b" is undefined in branch 57b4c67d-b128-4b9a-11e39-0e6612f1210e
↳ from test/tests/function scope wrong.ans:4:7 in identifier: b
↳ from test/tests/function scope wrong.ans:4:1 in text interpolation: | a: {b} |
↳ from test/tests/function scope wrong.ans:4:1 in translatable: | a: {b} |

View file

@ -1,6 +1,7 @@
--# run #--
--- error ---
can't call overload overload<($(s::($(x) type(x) == t), k::($(x) <lua function>)) = val; _), ($(s::($(x) type(x) == t), k::($(x) <lua function>)) _), ($(c::($(x) <lua function>), s::($(x) <lua function>)) = v; <lua function>), ($(c::($(x) <lua function>), s::($(x) <lua function>)) = v; <lua function>), ($(c::($(x) <lua function>), s::($(x) <lua function>)) <lua function>)>: no function match (overload<($(b) _), ($(x) _), ($() _)>, "a"), possible functions were:
can't call overload overload<($(s::($(x) type(x) == t), k::($(x) <lua function>)) = val; _), ($(s::($(x) type(x) == t), k::($(x) <lua function>)) = val; _), ($(s::($(x) type(x) == t), k::($(x) <lua function>)) _), ($(c::($(x) <lua function>), s::($(x) <lua function>)) = v; <lua function>), ($(c::($(x) <lua function>), s::($(x) <lua function>)) = v; <lua function>), ($(c::($(x) <lua function>), s::($(x) <lua function>)) <lua function>)>: no function match (overload<($(b) _), ($(x) _), ($() _)>, "a"), possible functions were:
• (s::($(x) type(x) == t), k::($(x) <lua function>)) = val: expected 3 arguments, received 2
• (s::($(x) type(x) == t), k::($(x) <lua function>)) = val: expected 3 arguments, received 2
• (s::($(x) type(x) == t), k::($(x) <lua function>)): type check failure for parameter s in function (s::($(x) type(x) == t), k::($(x) <lua function>))
• (c::($(x) <lua function>), s::($(x) <lua function>)) = v: expected 3 arguments, received 2

View file

@ -0,0 +1,11 @@
--# run #--
--- text ---
| {}"before: " {}"2" {}"" |
--- interrupt ---
nil
--- text ---
| {}"in interrupt: " {}"2" {}"" |
--- return ---
()
--# saved #--
{"bar.checkpoint":false}

View file

@ -0,0 +1,11 @@
--# run #--
--- text ---
| {}"before: " {}"2" {}"" |
--- interrupt ---
nil
--- text ---
| {}"in interrupt: " {}"2" {}"" |
--- return ---
()
--# saved #--
{"bar.checkpoint":false}

View file

@ -0,0 +1,11 @@
--# run #--
--- text ---
| {}"before: " {}"2" {}"" |
--- interrupt ---
nil
--- text ---
| {}"in interrupt: " {}"2" {}"" |
--- return ---
()
--# saved #--
{"bar.checkpoint":false}

View file

@ -0,0 +1,7 @@
--# run #--
--- text ---
| {}"before: " {}"2" {}"" |
--- interrupt ---
nil
--# saved #--
{}

View file

@ -0,0 +1,19 @@
--# run #--
--- text ---
| {}"x=" {}"*{1:4}" {}"" |
--- text ---
| {}"1=" {}"true" {}"" |
--- text ---
| {}"a(x)=" {}"4" {}"" |
--- text ---
| {}"a(x)=" {}"4" {}"" |
--- text ---
| {}"a(x)=" {}"4" {}"" |
--- text ---
| {}"a(x)=" {}"4" {}"" |
--- text ---
| {}"no=" {}"()" {}"" |
--- return ---
()
--# saved #--
{"f.checkpoint":#ch c, "f.reached":*{#ch a:1, #ch b:1, #ch c:1}, "f.run":1}

View file

@ -0,0 +1,10 @@
--# run #--
--- return ---
()
--# post run check #--
--- text ---
| {}"[1,[2,3,4]]: " {}"*[1, *[2, 3, 4]]" {}"" |
--- return ---
()
--# saved #--
{"f.checkpoint":#d, "f.reached":*{#c:1, #d:1}, "f.run":1}

View file

@ -0,0 +1,31 @@
--# run #--
--- error ---
abort
↳ from test/tests/merge nested mutable error bis.ans:14:7 in call: error("abort")
↳ from test/tests/merge nested mutable error bis.ans:3:1 in block: insert(a, b)…
↳ from test/tests/merge nested mutable error bis.ans:3:18 in call: _
↳ from test/tests/merge nested mutable error bis.ans:3:17 in return boundary: _
↳ from test/tests/merge nested mutable error bis.ans:3:17 in return boundary: _
↳ from script.ans:29:6 in call: fn!
↳ from script.ans:27:3 in block: resumed from = ()…
↳ from script.ans:27:5 in call: _
↳ from script.ans:27:3 in call: ~_
↳ from script.ans:27:3 in partial scope: ~_…
↳ from script.ans:23:2 in block: fn . "current checkpoint" ~…
↳ from script.ans:23:9 in call: _
↳ from script.ans:23:7 in return boundary: _
↳ from script.ans:23:7 in return boundary: _
↳ from script.ans:37:9 in call: value(s)!
↳ from script.ans:36:1 in block: value(s)!
↳ from script.ans:36:20 in call: _
↳ from script.ans:36:1 in return boundary: _
↳ from script.ans:36:1 in return boundary: _
↳ from test/tests/merge nested mutable error bis.ans:19:2 in call: f!
↳ from ? in block: :a = *[1]…
--# post run check #--
--- text ---
| {}"[1,[2,3]]: " {}"*[1, *[2, 3]]" {}"" |
--- return ---
()
--# saved #--
{"f.checkpoint":#d, "f.reached":*{#c:1, #d:1}}

View file

@ -0,0 +1,31 @@
--# run #--
--- error ---
abort
↳ from test/tests/merge nested mutable error.ans:14:7 in call: error("abort")
↳ from test/tests/merge nested mutable error.ans:3:1 in block: insert(a, b)…
↳ from test/tests/merge nested mutable error.ans:3:18 in call: _
↳ from test/tests/merge nested mutable error.ans:3:17 in return boundary: _
↳ from test/tests/merge nested mutable error.ans:3:17 in return boundary: _
↳ from script.ans:29:6 in call: fn!
↳ from script.ans:27:3 in block: resumed from = ()…
↳ from script.ans:27:5 in call: _
↳ from script.ans:27:3 in call: ~_
↳ from script.ans:27:3 in partial scope: ~_…
↳ from script.ans:23:2 in block: fn . "current checkpoint" ~…
↳ from script.ans:23:9 in call: _
↳ from script.ans:23:7 in return boundary: _
↳ from script.ans:23:7 in return boundary: _
↳ from script.ans:37:9 in call: value(s)!
↳ from script.ans:36:1 in block: value(s)!
↳ from script.ans:36:20 in call: _
↳ from script.ans:36:1 in return boundary: _
↳ from script.ans:36:1 in return boundary: _
↳ from test/tests/merge nested mutable error.ans:19:2 in call: f!
↳ from ? in block: :a = *[1]…
--# post run check #--
--- text ---
| {}"[1,[2,3]]: " {}"*[1, *[2, 3]]" {}"" |
--- return ---
()
--# saved #--
{"f.checkpoint":#d, "f.reached":*{#c:1, #d:1}}

View file

@ -0,0 +1,10 @@
--# run #--
--- return ---
()
--# post run check #--
--- text ---
| {}"[1,[2,3],4]: " {}"*[1, *[2, 3], 4]" {}"" |
--- return ---
()
--# saved #--
{"f.checkpoint":#d, "f.reached":*{#c:1, #d:1}, "f.run":1}

View file

@ -0,0 +1,42 @@
--# run #--
--- text ---
| {}"f1: " {}"*[1, *[99], 3]" {}" " {}"*[1, *[99], 3]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"REC" |
--- text ---
| {}"f1: " {}"*[1, *[99], 3, 4]" {}" " {}"*[1, *[99], 3, 4]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"f2: " {}"*[1, *[99], 3, 4]" {}"" |
--- text ---
| {}"CHECK 2" |
--- error ---
t
↳ from test/tests/scope checkpoint mutable bis error.ans:32:7 in call: error("t")
↳ from test/tests/scope checkpoint mutable bis error.ans:7:1 in block: insert(t, len(l) + 1)…
↳ from test/tests/scope checkpoint mutable bis error.ans:7:8 in call: _
↳ from test/tests/scope checkpoint mutable bis error.ans:7:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable bis error.ans:7:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable bis error.ans:19:4 in call: f(t)
↳ from test/tests/scope checkpoint mutable bis error.ans:15:2 in block: | REC |…
↳ from test/tests/scope checkpoint mutable bis error.ans:15:10 in call: _
↳ from test/tests/scope checkpoint mutable bis error.ans:15:8 in call: n < 1 ~ _
↳ from test/tests/scope checkpoint mutable bis error.ans:15:2 in partial scope: n < 1 ~…
↳ from test/tests/scope checkpoint mutable bis error.ans:7:1 in block: insert(t, len(l) + 1)…
↳ from test/tests/scope checkpoint mutable bis error.ans:7:8 in call: _
↳ from test/tests/scope checkpoint mutable bis error.ans:7:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable bis error.ans:7:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable bis error.ans:41:2 in call: f(l)
↳ from ? in block: :x = *[99]…
--# post run check #--
--- text ---
| {}"AFTER ERROR" |
--- text ---
| {}"l: " {}"*[1, *[99], 3, 4]" {}"" |
--- return ---
()
--# saved #--
{}

View file

@ -0,0 +1,35 @@
--# run #--
--- text ---
| {}"f1: " {}"*[1, *[99], 3]" {}" " {}"*[1, *[99], 3]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"REC" |
--- text ---
| {}"f1: " {}"*[1, *[99], 3, 4]" {}" " {}"*[1, *[99], 3, 4]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"f2: " {}"*[1, *[99], 3, 4]" {}"" |
--- text ---
| {}"CHECK 2" |
--- text ---
| {}"f3: " {}"*[1, *[99, 6], 3, 4, 5]" {}" " {}"*[1, *[99, 6], 3, 4, 5]" {}"" |
--- text ---
| {}"END REC" |
--- text ---
| {}"f2: " {}"*[1, *[99, 6], 3, 4, 5]" {}"" |
--- text ---
| {}"CHECK 2" |
--- text ---
| {}"f3: " {}"*[1, *[99, 6, 7], 3, 4, 5, 6]" {}" " {}"*[1, *[99, 6, 7], 3, 4, 5, 6]" {}"" |
--- text ---
| {}"FINAL" |
--- text ---
| {}"l: " {}"*[1, *[99, 6, 7], 3, 4, 5, 6]" {}"" |
--- text ---
| {}"x: " {}"*[99, 6, 7]" {}"" |
--- return ---
()
--# saved #--
{}

View file

@ -0,0 +1,38 @@
--# run #--
--- text ---
| {}"f1: " {}"*[1, 2]" {}" " {}"*[1, 2]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"REC" |
--- text ---
| {}"f1: " {}"*[1, 2, 3]" {}" " {}"*[1, 2, 3]" {}"" |
--- text ---
| {}"CHECK" |
--- error ---
t
↳ from test/tests/scope checkpoint mutable error.ans:23:7 in call: error("t")
↳ from test/tests/scope checkpoint mutable error.ans:5:1 in block: insert(t, len(l) + 1)…
↳ from test/tests/scope checkpoint mutable error.ans:5:8 in call: _
↳ from test/tests/scope checkpoint mutable error.ans:5:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable error.ans:5:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable error.ans:17:4 in call: f(t)
↳ from test/tests/scope checkpoint mutable error.ans:13:2 in block: | REC |…
↳ from test/tests/scope checkpoint mutable error.ans:13:10 in call: _
↳ from test/tests/scope checkpoint mutable error.ans:13:8 in call: n < 1 ~ _
↳ from test/tests/scope checkpoint mutable error.ans:13:2 in partial scope: n < 1 ~…
↳ from test/tests/scope checkpoint mutable error.ans:5:1 in block: insert(t, len(l) + 1)…
↳ from test/tests/scope checkpoint mutable error.ans:5:8 in call: _
↳ from test/tests/scope checkpoint mutable error.ans:5:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable error.ans:5:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable error.ans:32:2 in call: f(l)
↳ from ? in block: :l = *[1]…
--# post run check #--
--- text ---
| {}"AFTER ERROR" |
--- text ---
| {}"l: " {}"*[1, 2, 3]" {}"" |
--- return ---
()
--# saved #--
{}

View file

@ -0,0 +1,42 @@
--# run #--
--- text ---
| {}"f1: " {}"*[1, *[99], 3]" {}" " {}"*[1, *[99], 3]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"REC" |
--- text ---
| {}"f1: " {}"*[1, *[99], 3, 4]" {}" " {}"*[1, *[99], 3, 4]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"f2: " {}"*[1, *[99, 12], 3, 4]" {}"" |
--- text ---
| {}"CHECK 2" |
--- error ---
t
↳ from test/tests/scope checkpoint mutable ter error.ans:34:7 in call: error("t")
↳ from test/tests/scope checkpoint mutable ter error.ans:7:1 in block: insert(t, len(l) + 1)…
↳ from test/tests/scope checkpoint mutable ter error.ans:7:8 in call: _
↳ from test/tests/scope checkpoint mutable ter error.ans:7:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable ter error.ans:7:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable ter error.ans:19:4 in call: f(t)
↳ from test/tests/scope checkpoint mutable ter error.ans:15:2 in block: | REC |…
↳ from test/tests/scope checkpoint mutable ter error.ans:15:10 in call: _
↳ from test/tests/scope checkpoint mutable ter error.ans:15:8 in call: n < 1 ~ _
↳ from test/tests/scope checkpoint mutable ter error.ans:15:2 in partial scope: n < 1 ~…
↳ from test/tests/scope checkpoint mutable ter error.ans:7:1 in block: insert(t, len(l) + 1)…
↳ from test/tests/scope checkpoint mutable ter error.ans:7:8 in call: _
↳ from test/tests/scope checkpoint mutable ter error.ans:7:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable ter error.ans:7:1 in return boundary: _
↳ from test/tests/scope checkpoint mutable ter error.ans:43:2 in call: f(l)
↳ from ? in block: :x = *[99]…
--# post run check #--
--- text ---
| {}"AFTER ERROR" |
--- text ---
| {}"l: " {}"*[1, *[99, 12], 3, 4]" {}"" |
--- return ---
()
--# saved #--
{}

View file

@ -0,0 +1,35 @@
--# run #--
--- text ---
| {}"f1: " {}"*[1, *[99], 3]" {}" " {}"*[1, *[99], 3]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"REC" |
--- text ---
| {}"f1: " {}"*[1, *[99], 3, 4]" {}" " {}"*[1, *[99], 3, 4]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"f2: " {}"*[1, *[99, 12], 3, 4]" {}"" |
--- text ---
| {}"CHECK 2" |
--- text ---
| {}"f3: " {}"*[1, *[99, 12, 6], 3, 4, 5]" {}" " {}"*[1, *[99, 12, 6], 3, 4, 5]" {}"" |
--- text ---
| {}"END REC" |
--- text ---
| {}"f2: " {}"*[1, *[99, 12, 6, 12], 3, 4, 5]" {}"" |
--- text ---
| {}"CHECK 2" |
--- text ---
| {}"f3: " {}"*[1, *[99, 12, 6, 12, 7], 3, 4, 5, 6]" {}" " {}"*[1, *[99, 12, 6, 12, 7], 3, 4, 5, 6]" {}"" |
--- text ---
| {}"FINAL" |
--- text ---
| {}"l: " {}"*[1, *[99, 12, 6, 12, 7], 3, 4, 5, 6]" {}"" |
--- text ---
| {}"x: " {}"*[99, 12, 6, 12, 7]" {}"" |
--- return ---
()
--# saved #--
{}

View file

@ -0,0 +1,25 @@
--# run #--
--- text ---
| {}"f1: " {}"*[1, 2]" {}" " {}"*[1, 2]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"REC" |
--- text ---
| {}"f1: " {}"*[1, 2, 3]" {}" " {}"*[1, 2, 3]" {}"" |
--- text ---
| {}"CHECK" |
--- text ---
| {}"f2: " {}"*[1, 2, 3, 4]" {}"" |
--- text ---
| {}"END REC" |
--- text ---
| {}"f2: " {}"*[1, 2, 3, 4, 5]" {}"" |
--- text ---
| {}"FINAL" |
--- text ---
| {}"l: " {}"*[1, 2, 3, 4, 5]" {}"" |
--- return ---
()
--# saved #--
{}

View file

@ -0,0 +1,11 @@
--# run #--
--- text ---
| {}"a: " {}"0" {}"" |
--- text ---
| {}"a: " {}"1" {}"" |
--- text ---
| {}"a: " {}"2" {}"" |
--- return ---
()
--# saved #--
{"fn.checkpoint":#a, "fn.run":3}

View file

@ -0,0 +1,11 @@
--# run #--
--- text ---
| {}"a" |
| {}"seen only once" |
| {}"b" |
| {}"a" |
| {}"b" |
--- return ---
()
--# saved #--
{"x.checkpoint":false, "x.run":2}

View file

@ -5,6 +5,7 @@ local lfs = require("lfs")
package.path = "./?/init.lua;./?.lua;" .. package.path
local anselme = require("anselme")
local persistent_manager = require("anselme.state.persistent_manager")
local ast = require("anselme.ast")
-- simple random to get the same result across lua versions
local prev = 0
@ -22,25 +23,7 @@ function math.random(a, b)
end
end
-- run a test file and return the result
local function run(path)
local state = anselme:new()
state:load_stdlib()
local run_state = state:branch()
local f = assert(io.open(path, "r"))
local s, block = pcall(anselme.parse, f:read("*a"), path)
f:close()
if not s then
return "--# parse error #--\n"..tostring(block)
end
run_state:run(block)
local out = { "--# run #--" }
local function run_loop(run_state, out)
while run_state:active() do
local e, data = run_state:step()
table.insert(out, "--- "..e.." ---")
@ -65,9 +48,51 @@ local function run(path)
table.insert(out, tostring(data))
end
end
end
-- run a test file and return the result
local function run(path)
local out = { "--# run #--" }
local state = anselme:new()
state:load_stdlib()
state:define("error", "(message=\"error\")", function(message) error(message, 0) end)
state:define("interrupt", "(code::string)", function(state, code) state:interrupt(code:to_lua(state), "interrupt") return ast.Nil:new() end, true)
state:define("interrupt", "()", function(state) state:interrupt() return ast.Nil:new() end, true)
state:define("wait", "(duration::number)", function(duration) coroutine.yield("wait", duration) end)
state:define("run in new branch", "(code)", function(code)
local parallel_state = state:branch()
table.insert(out, "--# parallel script #--")
parallel_state:run(code, "parallel")
run_loop(parallel_state, out)
table.insert(out, "--# main script #--")
end)
local run_state = state:branch()
local f = assert(io.open(path, "r"))
local s, block = pcall(anselme.parse, f:read("*a"), path)
f:close()
if not s then
return "--# parse error #--\n"..tostring(block)
end
run_state:run(block)
run_loop(run_state, out)
if state:defined("post run check") then
local post_run_state = state:branch()
post_run_state:run("post run check!")
table.insert(out, "--# post run check #--")
run_loop(post_run_state, out)
end
table.insert(out, "--# saved #--")
table.insert(out, persistent_manager:capture(run_state):format(run_state))
table.insert(out, persistent_manager:capture(state):format(state))
return table.concat(out, "\n")
end

View file

@ -0,0 +1,24 @@
:l = *[1,2]
:@$ post run check
|1,2,3,4: {l}
|1,2: {l}
l!insert(3)
|1,2,3: {l}
merge branch!
l!insert(4)
|1,2,3,4: {l}
merge branch!
l!insert(5)
|1,2,3,4,5: {l}
error("cancel merge")

View file

@ -0,0 +1,24 @@
:l = 1
:@$ post run check
|3: {l}
|1: {l}
l = 2
|2: {l}
merge branch!
l = 3
|3: {l}
merge branch!
l = 4
|4: {l}
error("cancel merge")

21
test/tests/commit.ans Normal file
View file

@ -0,0 +1,21 @@
:bar = "bar"!script($_)
var = 2
|before: {var}
run in new branch("parallel!")
#foo!checkpoint($_)
|checkpoint
|after: {var}
run in new branch("parallel!")
bar.:var = 5
:@$ parallel
|parallel: {bar.var}
merge branch!
bar!

View file

@ -0,0 +1,3 @@
|ah
wait(5)
|ho

View file

@ -0,0 +1,5 @@
:$ f(a, b) 0
:$ f(x) 0
:$ f(a, b) 0

View file

@ -0,0 +1,18 @@
:$ f
:a = "a"!script($_)
| a
:b = "b"!script($_)
| b
:c = "c"!script($_)
| c
cycle([a,b,c])
f!
f!
f!
f!
f!

View file

@ -0,0 +1,18 @@
:$ f
:a = "a"!script($_)
| a
:b = "b"!script($_)
| b
:c = "c"!script($_)
| c
next([a, b, c])
f!
f!
f!
f!
f!

View file

@ -0,0 +1,18 @@
:$ f
:a = "a"!script($_)
| a
:b = "b"!script($_)
| b
:c = "c"!script($_)
| c
random([a,b,c])
f!
f!
f!
f!
f!

View file

@ -0,0 +1,20 @@
:oh = $
|no
oh.:bar = "bar"!script($_)
:leave = $
|in interrupt: {var}
var = 2
|before: {var}
interrupt("leave!")
#foo!checkpoint($_)
|checkpoint
|after: {var}
oh.bar.:var = 5
oh.bar!

View file

@ -0,0 +1,20 @@
:$ leave
|in interrupt: {oh.bar.var}
:$ oh
|no
oh.:bar = "bar"!script($_)
var = 2
|before: {var}
interrupt("leave!")
#foo!checkpoint($_)
|checkpoint
|after: {var}
oh.bar.:var = 5
oh.bar!

View file

@ -0,0 +1,18 @@
:bar = "bar"!script($_)
:var = 5
var = 2
:$ leave
|in interrupt: {var}
|before: {var}
interrupt("leave!")
#foo!checkpoint($_)
|checkpoint
|after: {var}
bar!

View file

@ -0,0 +1,18 @@
:bar = "bar"!script($_)
:var = 5
var = 2
:$ leave
|in interrupt: {var}
|before: {var}
interrupt()
#foo!checkpoint($_)
|checkpoint
|after: {var}
bar!

View file

@ -0,0 +1,32 @@
:f = "f"!script($_)
:x = *{4}
|x={x}
:a = {1,2,3,(x):4}
:c = a
|1={a==c}
|a(x)={a(x)}
#ch a!checkpoint
|a(x)={a(x)}
#ch b!checkpoint
x(1) = 3
|a(x)={a(x)}
#ch c!checkpoint
|a(x)={a(x)}
x={4}
|no={a(x)}
f!

View file

@ -0,0 +1,17 @@
:a = *[1]
:b = *[2]
:f = "f"!script($_)
a!insert(b)
#c!checkpoint
b!insert(3)
#d!checkpoint
b!insert(4)
:@$ post run check
|[1,[2,3,4]]: {a}
f!

View file

@ -0,0 +1,19 @@
:a = *[1]
:b = *[2]
:f = "f"!script($_)
a!insert(b)
#c!checkpoint
b!insert(3)
#d!checkpoint
b!insert(4)
error("abort")
:@$ post run check
|[1,[2,3]]: {a}
f!

View file

@ -0,0 +1,19 @@
:a = *[1]
:b = *[2]
:f = "f"!script($_)
a!insert(b)
#c!checkpoint
b!insert(3)
#d!checkpoint
a!insert(4)
error("abort")
:@$ post run check
|[1,[2,3]]: {a}
f!

View file

@ -0,0 +1,17 @@
:a = *[1]
:b = *[2]
:f = "f"!script($_)
a!insert(b)
#c!checkpoint
b!insert(3)
#d!checkpoint
a!insert(4)
:@$ post run check
|[1,[2,3],4]: {a}
f!

View file

@ -0,0 +1,47 @@
:x = *[99]
:l = *[1,x]
:n = 0
:$ f(t)
t!insert(len(l)+1)
|f1: {l} {t}
|CHECK
merge branch!
n < 1 ~
|REC
n += 1
f(t)
|END REC
|f2: {l}
|CHECK 2
merge branch!
t!insert(len(t)+1)
t(2)!insert(len(l)+1)
error("t")
|f3: {l} {t}
:@$ post run check
|AFTER ERROR
|l: {l}
f(l)
|FINAL
|l: {l}
|x: {x}

View file

@ -0,0 +1,40 @@
:x = *[99]
:l = *[1,x]
:n = 0
:$ f(t)
t!insert(len(l)+1)
|f1: {l} {t}
|CHECK
merge branch!
n < 1 ~
|REC
n += 1
f(t)
|END REC
|f2: {l}
|CHECK 2
merge branch!
t!insert(len(t)+1)
t(2)!insert(len(l)+1)
|f3: {l} {t}
f(l)
|FINAL
|l: {l}
|x: {x}

View file

@ -0,0 +1,36 @@
:l = *[1]
:n = 0
:$ f(t)
t!insert(len(l)+1)
|f1: {l} {t}
|CHECK
merge branch!
n < 1 ~
|REC
n += 1
f(t)
|END REC
t!insert(len(t)+1)
error("t")
|f2: {l}
:@$ post run check
|AFTER ERROR
|l: {l}
f(l)
|FINAL
|l: {l}

View file

@ -0,0 +1,49 @@
:x = *[99]
:l = *[1,x]
:n = 0
:$ f(t)
t!insert(len(l)+1)
|f1: {l} {t}
|CHECK
merge branch!
n < 1 ~
|REC
n += 1
f(t)
|END REC
x!insert(12)
|f2: {l}
|CHECK 2
merge branch!
t!insert(len(t)+1)
t(2)!insert(len(l)+1)
error("t")
|f3: {l} {t}
:@$ post run check
|AFTER ERROR
|l: {l}
f(l)
|FINAL
|l: {l}
|x: {x}

View file

@ -0,0 +1,42 @@
:x = *[99]
:l = *[1,x]
:n = 0
:$ f(t)
t!insert(len(l)+1)
|f1: {l} {t}
|CHECK
merge branch!
n < 1 ~
|REC
n += 1
f(t)
|END REC
x!insert(12)
|f2: {l}
|CHECK 2
merge branch!
t!insert(len(t)+1)
t(2)!insert(len(l)+1)
|f3: {l} {t}
f(l)
|FINAL
|l: {l}
|x: {x}

View file

@ -0,0 +1,29 @@
:l = *[1]
:n = 0
:$ f(t)
t!insert(len(l)+1)
|f1: {l} {t}
|CHECK
merge branch!
n < 1 ~
|REC
n += 1
f(t)
|END REC
t!insert(len(t)+1)
|f2: {l}
f(l)
|FINAL
|l: {l}

View file

@ -0,0 +1,12 @@
: fn = "fn"!script($_)
|{run}
#a!checkpoint
|a: {run}
fn!from(#a)
fn!from(#a)
fn!from(#a)

View file

@ -0,0 +1,7 @@
: x = "x"!script($_)
|a
run == 0 ~ |seen only once
|b
x!
x!