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:
parent
050c84921c
commit
43a745a7a9
66 changed files with 1233 additions and 51 deletions
|
|
@ -38,6 +38,9 @@ Closure = Runtime(Overloadable) {
|
||||||
format_parameters = function(self, state)
|
format_parameters = function(self, state)
|
||||||
return self.func.parameters:format(state)
|
return self.func.parameters:format(state)
|
||||||
end,
|
end,
|
||||||
|
hash_parameters = function(self)
|
||||||
|
return self.func.parameters:hash()
|
||||||
|
end,
|
||||||
call_dispatched = function(self, state, args)
|
call_dispatched = function(self, state, args)
|
||||||
local calling_environment = state.scope:capture()
|
local calling_environment = state.scope:capture()
|
||||||
state.scope:push(self.scope)
|
state.scope:push(self.scope)
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,9 @@ Function = Overloadable {
|
||||||
format_parameters = function(self, state)
|
format_parameters = function(self, state)
|
||||||
return self.parameters:format(state)
|
return self.parameters:format(state)
|
||||||
end,
|
end,
|
||||||
|
hash_parameters = function(self)
|
||||||
|
return self.parameters:hash()
|
||||||
|
end,
|
||||||
call_dispatched = function(self, state, args)
|
call_dispatched = function(self, state, args)
|
||||||
state.scope:push()
|
state.scope:push()
|
||||||
args:bind_parameter_tuple(state, self.parameters)
|
args:bind_parameter_tuple(state, self.parameters)
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ List = ast.abstract.Runtime {
|
||||||
end,
|
end,
|
||||||
|
|
||||||
len = function(self, state)
|
len = function(self, state)
|
||||||
return #self.branched:get(state).list
|
return self.branched:get(state):len()
|
||||||
end,
|
end,
|
||||||
iter = function(self, state)
|
iter = function(self, state)
|
||||||
return ipairs(self.branched:get(state).list)
|
return ipairs(self.branched:get(state).list)
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,10 @@ LuaFunction = ast.abstract.Runtime(Overloadable) {
|
||||||
fn(self.parameters, ...)
|
fn(self.parameters, ...)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
_hash = function(self)
|
||||||
|
return ("%s<%s;%s>"):format(self.type, self.parameters:hash(), tostring(self.func))
|
||||||
|
end,
|
||||||
|
|
||||||
_format = function(self, ...)
|
_format = function(self, ...)
|
||||||
if self.parameters.assignment then
|
if self.parameters.assignment then
|
||||||
return "$"..self.parameters:format(...).."; <lua function>"
|
return "$"..self.parameters:format(...).."; <lua function>"
|
||||||
|
|
@ -37,6 +41,9 @@ LuaFunction = ast.abstract.Runtime(Overloadable) {
|
||||||
format_parameters = function(self, state)
|
format_parameters = function(self, state)
|
||||||
return self.parameters:format(state)
|
return self.parameters:format(state)
|
||||||
end,
|
end,
|
||||||
|
hash_parameters = function(self)
|
||||||
|
return self.parameters:hash()
|
||||||
|
end,
|
||||||
call_dispatched = function(self, state, args)
|
call_dispatched = function(self, state, args)
|
||||||
local lua_args = { state }
|
local lua_args = { state }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,25 @@
|
||||||
local ast = require("anselme.ast")
|
local ast = require("anselme.ast")
|
||||||
|
local assert0 = require("anselme.common").assert0
|
||||||
|
|
||||||
local Overload
|
local Overload
|
||||||
Overload = ast.abstract.Node {
|
Overload = ast.abstract.Node {
|
||||||
type = "overload",
|
type = "overload",
|
||||||
_evaluated = true,
|
_evaluated = true,
|
||||||
|
|
||||||
list = nil,
|
list = nil, -- list of Overloadable
|
||||||
|
_signatures = nil, -- map {[parameter hash]=true} of call signatures already registered in this overload
|
||||||
|
|
||||||
init = function(self, ...)
|
init = function(self, ...)
|
||||||
self.list = { ... }
|
self.list = {}
|
||||||
|
self._signatures = {}
|
||||||
|
for _, fn in ipairs{...} do
|
||||||
|
self:insert(fn)
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
insert = function(self, val) -- only for construction
|
insert = function(self, val) -- only for construction
|
||||||
|
assert0(not self._signatures[val:hash_parameters()], ("a function with parameters %s is already defined in the overload"):format(val:format_parameters()))
|
||||||
table.insert(self.list, val)
|
table.insert(self.list, val)
|
||||||
|
self._signatures[val:hash_parameters()] = true
|
||||||
end,
|
end,
|
||||||
|
|
||||||
_format = function(self, ...)
|
_format = function(self, ...)
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,9 @@ Tuple = ast.abstract.Node {
|
||||||
if index < 0 then index = #self.list + 1 + index end
|
if index < 0 then index = #self.list + 1 + index end
|
||||||
if index > #self.list or index == 0 then error("tuple index out of bounds", 0) end
|
if index > #self.list or index == 0 then error("tuple index out of bounds", 0) end
|
||||||
return self.list[index]
|
return self.list[index]
|
||||||
|
end,
|
||||||
|
len = function(self)
|
||||||
|
return #self.list
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,10 @@ return ast.abstract.Node {
|
||||||
format_parameters = function(self, state)
|
format_parameters = function(self, state)
|
||||||
return self:format(state)
|
return self:format(state)
|
||||||
end,
|
end,
|
||||||
|
-- return string
|
||||||
|
hash_parameters = function(self)
|
||||||
|
return self:hash()
|
||||||
|
end,
|
||||||
|
|
||||||
-- can be called either after a successful :dispatch or :compatible_with_arguments
|
-- can be called either after a successful :dispatch or :compatible_with_arguments
|
||||||
call_dispatched = function(self, state, args)
|
call_dispatched = function(self, state, args)
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ local parser = require("anselme.parser")
|
||||||
local binser = require("anselme.lib.binser")
|
local binser = require("anselme.lib.binser")
|
||||||
local assert0 = require("anselme.common").assert0
|
local assert0 = require("anselme.common").assert0
|
||||||
local anselme
|
local anselme
|
||||||
|
local Identifier
|
||||||
|
|
||||||
local State
|
local State
|
||||||
State = class {
|
State = class {
|
||||||
|
|
@ -90,6 +91,18 @@ State = class {
|
||||||
define_local = function(self, name, value, func, raw_mode)
|
define_local = function(self, name, value, func, raw_mode)
|
||||||
self.scope:define_lua(name, value, func, raw_mode)
|
self.scope:define_lua(name, value, func, raw_mode)
|
||||||
end,
|
end,
|
||||||
|
--- Returns true if `name` (string) is defined in the global scope.
|
||||||
|
--- Returns false otherwise.
|
||||||
|
defined = function(self, name)
|
||||||
|
self.scope:push_global()
|
||||||
|
local r = self:defined_local(name)
|
||||||
|
self.scope:pop()
|
||||||
|
return r
|
||||||
|
end,
|
||||||
|
--- Same as `:defined`, but check if the variable is defined in the current scope.
|
||||||
|
defined_local = function(self, name)
|
||||||
|
return self.scope:defined(Identifier:new(name))
|
||||||
|
end,
|
||||||
|
|
||||||
--- For anything more advanced, you can directly access the current scope stack stored in `state.scope`.
|
--- For anything more advanced, you can directly access the current scope stack stored in `state.scope`.
|
||||||
-- See [state/ScopeStack.lua](../state/ScopeStack.lua) for details; the documentation is not as polished as this file but you should still be able to find your way around.
|
-- See [state/ScopeStack.lua](../state/ScopeStack.lua) for details; the documentation is not as polished as this file but you should still be able to find your way around.
|
||||||
|
|
@ -160,7 +173,7 @@ State = class {
|
||||||
self.scope:reset()
|
self.scope:reset()
|
||||||
type, data = "error", type
|
type, data = "error", type
|
||||||
end
|
end
|
||||||
if coroutine.status(self._coroutine) == "dead" then
|
if self._coroutine and coroutine.status(self._coroutine) == "dead" then
|
||||||
self._coroutine = nil
|
self._coroutine = nil
|
||||||
end
|
end
|
||||||
return type, data
|
return type, data
|
||||||
|
|
@ -171,8 +184,11 @@ State = class {
|
||||||
--
|
--
|
||||||
-- If `code` is given, the script will not be disabled but instead will be immediately replaced with this new script.
|
-- If `code` is given, the script will not be disabled but instead will be immediately replaced with this new script.
|
||||||
-- The new script will then be started on the next `:step` and will preserve the current scope. This can be used to trigger an exit function or similar in the active script.
|
-- The new script will then be started on the next `:step` and will preserve the current scope. This can be used to trigger an exit function or similar in the active script.
|
||||||
|
--
|
||||||
|
-- If this is called from within a running script, this will raise an `interrupt` event in order to stop the current script execution.
|
||||||
interrupt = function(self, code, source)
|
interrupt = function(self, code, source)
|
||||||
assert(self:active(), "trying to interrupt but no script is currently active")
|
assert(self:active(), "trying to interrupt but no script is currently active")
|
||||||
|
local called_from_script = self:state() == "running"
|
||||||
if code then
|
if code then
|
||||||
self._coroutine = coroutine.create(function()
|
self._coroutine = coroutine.create(function()
|
||||||
local r = assert0(self:eval_local(code, source))
|
local r = assert0(self:eval_local(code, source))
|
||||||
|
|
@ -184,6 +200,7 @@ State = class {
|
||||||
self.scope:reset()
|
self.scope:reset()
|
||||||
self._coroutine = nil
|
self._coroutine = nil
|
||||||
end
|
end
|
||||||
|
if called_from_script then coroutine.yield("interrupt") end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
--- Evaluate an expression in the global scope.
|
--- Evaluate an expression in the global scope.
|
||||||
|
|
@ -221,5 +238,7 @@ State = class {
|
||||||
|
|
||||||
package.loaded[...] = State
|
package.loaded[...] = State
|
||||||
anselme = require("anselme")
|
anselme = require("anselme")
|
||||||
|
local ast = require("anselme.ast")
|
||||||
|
Identifier = ast.Identifier
|
||||||
|
|
||||||
return State
|
return State
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
local ast = require("anselme.ast")
|
local ast = require("anselme.ast")
|
||||||
local ArgumentTuple, Boolean = ast.ArgumentTuple, ast.Boolean
|
local ArgumentTuple, Boolean, Nil = ast.ArgumentTuple, ast.Boolean, ast.Nil
|
||||||
|
|
||||||
local resume_manager = require("anselme.state.resume_manager")
|
local resume_manager = require("anselme.state.resume_manager")
|
||||||
|
|
||||||
|
|
@ -47,4 +47,11 @@ return {
|
||||||
return resume_manager:get(state)
|
return resume_manager:get(state)
|
||||||
end
|
end
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"merge branch", "()",
|
||||||
|
function(state)
|
||||||
|
state:merge()
|
||||||
|
return Nil:new()
|
||||||
|
end
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,4 +46,8 @@ return {
|
||||||
{ "_%_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number % b.number) end },
|
{ "_%_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number % b.number) end },
|
||||||
{ "_^_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number ^ b.number) end },
|
{ "_^_", "(a::number, b::number)", function(state, a, b) return Number:new(a.number ^ b.number) end },
|
||||||
{ "-_", "(a::number)", function(state, a) return Number:new(-a.number) end },
|
{ "-_", "(a::number)", function(state, a) return Number:new(-a.number) end },
|
||||||
|
|
||||||
|
{ "rand", "(min::number, max::number)", function(state, min, max) return Number:new(math.random(min.number, max.number)) end },
|
||||||
|
{ "rand", "(max::number)", function(state, max) return Number:new(math.random(max.number)) end },
|
||||||
|
{ "rand", "()", function(state) return Number:new(math.random()) end },
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,34 @@
|
||||||
return [[
|
return [[
|
||||||
:@script = $(name, fn)
|
:@script = $(name, fn)
|
||||||
:¤t checkpoint => "{name}.checkpoint"!persist(false)
|
fn.:¤t checkpoint => "{name}.checkpoint"!persist(false)
|
||||||
:&reached => "{name}.reached"!persist(*{})
|
fn.:&reached => "{name}.reached"!persist(*{})
|
||||||
|
fn.:&run => "{name}.run"!persist(0)
|
||||||
|
|
||||||
:resumed from = ()
|
:resumed from = ()
|
||||||
|
|
||||||
fn.:check = $(anchor::anchor)
|
fn.:check = $(anchor::anchor)
|
||||||
reached(anchor) = (reached(anchor) | 0) + 1
|
fn.reached(anchor) = (fn.reached(anchor) | 0) + 1
|
||||||
fn.:checkpoint = $(anchor::anchor)
|
fn.:checkpoint = $(anchor::anchor)
|
||||||
current checkpoint = anchor
|
fn.current checkpoint = anchor
|
||||||
resumed from != anchor ~
|
resumed from != anchor ~
|
||||||
reached(anchor) = (reached(anchor) | 0) + 1
|
fn.reached(anchor) = (fn.reached(anchor) | 0) + 1
|
||||||
|
merge branch!
|
||||||
fn.:checkpoint = $(anchor::anchor, on resume::function)
|
fn.:checkpoint = $(anchor::anchor, on resume::function)
|
||||||
current checkpoint = anchor
|
fn.current checkpoint = anchor
|
||||||
resumed from == anchor | resuming(1) ~
|
resumed from == anchor | resuming(1) ~
|
||||||
on resume!
|
on resume!
|
||||||
~
|
~
|
||||||
reached(anchor) = (reached(anchor) | 0) + 1
|
fn.reached(anchor) = (fn.reached(anchor) | 0) + 1
|
||||||
|
merge branch!
|
||||||
|
|
||||||
:f = $
|
:f = $
|
||||||
current checkpoint ~
|
fn.current checkpoint ~
|
||||||
resumed from = current checkpoint
|
resumed from = fn.current checkpoint
|
||||||
fn!resume(current checkpoint)
|
fn!resume(fn.current checkpoint)
|
||||||
~
|
~
|
||||||
resumed from = ()
|
resumed from = ()
|
||||||
fn!
|
fn!
|
||||||
run += 1
|
fn.run += 1
|
||||||
f.:&run => "{name}.run"!persist(0)
|
|
||||||
|
|
||||||
f!type("script")
|
f!type("script")
|
||||||
|
|
||||||
|
|
@ -35,18 +38,11 @@ return [[
|
||||||
s!value!
|
s!value!
|
||||||
|
|
||||||
:@$_._(s::is script, k::string)
|
:@$_._(s::is script, k::string)
|
||||||
:v = s!value
|
@(s!value).fn.(k)
|
||||||
v.fn!has upvalue(k) ~
|
|
||||||
@v.fn.(k)
|
|
||||||
~
|
|
||||||
@v.(k)
|
|
||||||
|
|
||||||
:@$_._(s::is script, k::string) = val
|
:@$_._(s::is script, k::string) = val
|
||||||
:v = s!value
|
(s!value).fn.(k) = val
|
||||||
v.fn!has upvalue(k) ~
|
:@$_._(s::is script, k::symbol) = val
|
||||||
v.fn.(k) = val
|
(s!value).fn.(k) = val
|
||||||
~
|
|
||||||
v.(k) = val
|
|
||||||
|
|
||||||
:@$from(s::is script, a::anchor)
|
:@$from(s::is script, a::anchor)
|
||||||
s.current checkpoint = a
|
s.current checkpoint = a
|
||||||
|
|
@ -54,4 +50,24 @@ return [[
|
||||||
:@$from(s::is script)
|
:@$from(s::is script)
|
||||||
s.current checkpoint = ()
|
s.current checkpoint = ()
|
||||||
@s!
|
@s!
|
||||||
|
|
||||||
|
((Additionnal helpers))
|
||||||
|
:@$ cycle(l::tuple)
|
||||||
|
:i = 2
|
||||||
|
i <= l!len ~?
|
||||||
|
l(i).run < l(1).run ~
|
||||||
|
@l(i)!
|
||||||
|
i += 1
|
||||||
|
l(1)!
|
||||||
|
|
||||||
|
:@$ next(l::tuple)
|
||||||
|
:i = 1
|
||||||
|
i <= l!len ~?
|
||||||
|
l(i).run == 0 ~
|
||||||
|
@l(i)!
|
||||||
|
i += 1
|
||||||
|
l(i-1)!
|
||||||
|
|
||||||
|
:@$ random(l::tuple)
|
||||||
|
l(rand(1, l!len))!
|
||||||
]]
|
]]
|
||||||
|
|
@ -15,6 +15,12 @@ return {
|
||||||
return l:get(i.number)
|
return l:get(i.number)
|
||||||
end
|
end
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"len", "(l::tuple)",
|
||||||
|
function(state, l)
|
||||||
|
return Number:new(l:len())
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
-- list
|
-- list
|
||||||
{
|
{
|
||||||
|
|
|
||||||
20
test/results/checkpoint merging mutable value.ans
Normal file
20
test/results/checkpoint merging mutable value.ans
Normal 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 ---
|
||||||
|
[0m[31m[0m[31mcancel merge[0m
|
||||||
|
↳ from [4mtest/tests/checkpoint merging mutable value.ans:24:6[0m in call: [2merror("cancel merge")[0m[0m
|
||||||
|
↳ from [4m?[0m in block: [2m:l = *[1, 2]…[0m
|
||||||
|
--# post run check #--
|
||||||
|
--- text ---
|
||||||
|
| {}"1,2,3,4: " {}"*[1, 2, 3, 4]" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{}
|
||||||
20
test/results/checkpoint merging variable.ans
Normal file
20
test/results/checkpoint merging variable.ans
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
--# run #--
|
||||||
|
--- text ---
|
||||||
|
| {}"1: " {}"1" {}"" |
|
||||||
|
--- text ---
|
||||||
|
| {}"2: " {}"2" {}"" |
|
||||||
|
--- text ---
|
||||||
|
| {}"3: " {}"3" {}"" |
|
||||||
|
--- text ---
|
||||||
|
| {}"4: " {}"4" {}"" |
|
||||||
|
--- error ---
|
||||||
|
[0m[31m[0m[31mcancel merge[0m
|
||||||
|
↳ from [4mtest/tests/checkpoint merging variable.ans:24:6[0m in call: [2merror("cancel merge")[0m[0m
|
||||||
|
↳ from [4m?[0m in block: [2m:l = 1…[0m
|
||||||
|
--# post run check #--
|
||||||
|
--- text ---
|
||||||
|
| {}"3: " {}"3" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{}
|
||||||
21
test/results/commit.ans
Normal file
21
test/results/commit.ans
Normal 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}
|
||||||
10
test/results/custom event.ans
Normal file
10
test/results/custom event.ans
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
--# run #--
|
||||||
|
--- wait ---
|
||||||
|
5
|
||||||
|
--- text ---
|
||||||
|
| {}"ah" |
|
||||||
|
| {}"ho" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{}
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
--- text ---
|
--- text ---
|
||||||
| {}"" {}"42" {}"" |
|
| {}"" {}"42" {}"" |
|
||||||
--- error ---
|
--- error ---
|
||||||
[0m[31m[0m[31m[0m[31m[0m[31midentifier "z" is undefined in branch 6843ee85-cea8-445d-10f21-9a8e54372094[0m
|
[0m[31m[0m[31m[0m[31m[0m[31midentifier "z" is undefined in branch 1228bcf1-5118-4955-10048-8fda790007be[0m
|
||||||
↳ from [4mtest/tests/exported variable nested.ans:12:3[0m in identifier: [2mz[0m[0m
|
↳ from [4mtest/tests/exported variable nested.ans:12:3[0m in identifier: [2mz[0m[0m
|
||||||
↳ from [4mtest/tests/exported variable nested.ans:12:1[0m in text interpolation: [2m| {z} |[0m[0m
|
↳ from [4mtest/tests/exported variable nested.ans:12:1[0m in text interpolation: [2m| {z} |[0m[0m
|
||||||
↳ from [4mtest/tests/exported variable nested.ans:12:1[0m in translatable: [2m| {z} |[0m[0m
|
↳ from [4mtest/tests/exported variable nested.ans:12:1[0m in translatable: [2m| {z} |[0m[0m
|
||||||
|
|
|
||||||
7
test/results/function conflict.ans
Normal file
7
test/results/function conflict.ans
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
--# run #--
|
||||||
|
--- error ---
|
||||||
|
[0m[31m[0m[31ma function with parameters (a, b) is already defined in the overload[0m
|
||||||
|
↳ from [4mtest/tests/function conflict.ans:5:1[0m in definition: [2m:f = ($(a, b) 0)[0m[0m
|
||||||
|
↳ from [4m?[0m in block: [2m:f = ($(a, b) 0)…[0m
|
||||||
|
--# saved #--
|
||||||
|
{}
|
||||||
15
test/results/function cycle.ans
Normal file
15
test/results/function cycle.ans
Normal 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}
|
||||||
15
test/results/function next.ans
Normal file
15
test/results/function next.ans
Normal 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}
|
||||||
15
test/results/function random.ans
Normal file
15
test/results/function random.ans
Normal 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}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
--# run #--
|
--# run #--
|
||||||
--- error ---
|
--- error ---
|
||||||
[0m[31m[0m[31m[0m[31m[0m[31midentifier "b" is undefined in branch 0a138a38-3faa-4478-10f6f-1a9de1e0a8e1[0m
|
[0m[31m[0m[31m[0m[31m[0m[31midentifier "b" is undefined in branch 57b4c67d-b128-4b9a-11e39-0e6612f1210e[0m
|
||||||
↳ from [4mtest/tests/function scope wrong.ans:4:7[0m in identifier: [2mb[0m[0m
|
↳ from [4mtest/tests/function scope wrong.ans:4:7[0m in identifier: [2mb[0m[0m
|
||||||
↳ from [4mtest/tests/function scope wrong.ans:4:1[0m in text interpolation: [2m| a: {b} |[0m[0m
|
↳ from [4mtest/tests/function scope wrong.ans:4:1[0m in text interpolation: [2m| a: {b} |[0m[0m
|
||||||
↳ from [4mtest/tests/function scope wrong.ans:4:1[0m in translatable: [2m| a: {b} |[0m[0m
|
↳ from [4mtest/tests/function scope wrong.ans:4:1[0m in translatable: [2m| a: {b} |[0m[0m
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
--# run #--
|
--# run #--
|
||||||
--- error ---
|
--- error ---
|
||||||
[0m[31m[0m[31m[0m[31m[0m[31mcan'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:
|
[0m[31m[0m[31m[0m[31m[0m[31mcan'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>)) = 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>))
|
• (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
|
• (c::($(x) <lua function>), s::($(x) <lua function>)) = v: expected 3 arguments, received 2
|
||||||
|
|
|
||||||
11
test/results/interrupt callback nested paragraph.ans
Normal file
11
test/results/interrupt callback nested paragraph.ans
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
--# run #--
|
||||||
|
--- text ---
|
||||||
|
| {}"before: " {}"2" {}"" |
|
||||||
|
--- interrupt ---
|
||||||
|
nil
|
||||||
|
--- text ---
|
||||||
|
| {}"in interrupt: " {}"2" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{"bar.checkpoint":false}
|
||||||
11
test/results/interrupt callback nested.ans
Normal file
11
test/results/interrupt callback nested.ans
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
--# run #--
|
||||||
|
--- text ---
|
||||||
|
| {}"before: " {}"2" {}"" |
|
||||||
|
--- interrupt ---
|
||||||
|
nil
|
||||||
|
--- text ---
|
||||||
|
| {}"in interrupt: " {}"2" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{"bar.checkpoint":false}
|
||||||
11
test/results/interrupt callback.ans
Normal file
11
test/results/interrupt callback.ans
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
--# run #--
|
||||||
|
--- text ---
|
||||||
|
| {}"before: " {}"2" {}"" |
|
||||||
|
--- interrupt ---
|
||||||
|
nil
|
||||||
|
--- text ---
|
||||||
|
| {}"in interrupt: " {}"2" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{"bar.checkpoint":false}
|
||||||
7
test/results/interrupt no callback.ans
Normal file
7
test/results/interrupt no callback.ans
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
--# run #--
|
||||||
|
--- text ---
|
||||||
|
| {}"before: " {}"2" {}"" |
|
||||||
|
--- interrupt ---
|
||||||
|
nil
|
||||||
|
--# saved #--
|
||||||
|
{}
|
||||||
19
test/results/map index accross checkpoints.ans
Normal file
19
test/results/map index accross checkpoints.ans
Normal 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}
|
||||||
10
test/results/merge nested mutable bis.ans
Normal file
10
test/results/merge nested mutable bis.ans
Normal 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}
|
||||||
31
test/results/merge nested mutable error bis.ans
Normal file
31
test/results/merge nested mutable error bis.ans
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
--# run #--
|
||||||
|
--- error ---
|
||||||
|
[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31mabort[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error bis.ans:14:7[0m in call: [2merror("abort")[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error bis.ans:3:1[0m in block: [2minsert(a, b)…[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error bis.ans:3:18[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error bis.ans:3:17[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error bis.ans:3:17[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:29:6[0m in call: [2mfn![0m[0m
|
||||||
|
↳ from [4mscript.ans:27:3[0m in block: [2mresumed from = ()…[0m[0m
|
||||||
|
↳ from [4mscript.ans:27:5[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:27:3[0m in call: [2m~_[0m[0m
|
||||||
|
↳ from [4mscript.ans:27:3[0m in partial scope: [2m~_…[0m[0m
|
||||||
|
↳ from [4mscript.ans:23:2[0m in block: [2mfn . "current checkpoint" ~…[0m[0m
|
||||||
|
↳ from [4mscript.ans:23:9[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:23:7[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:23:7[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:37:9[0m in call: [2mvalue(s)![0m[0m
|
||||||
|
↳ from [4mscript.ans:36:1[0m in block: [2mvalue(s)![0m[0m
|
||||||
|
↳ from [4mscript.ans:36:20[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:36:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:36:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error bis.ans:19:2[0m in call: [2mf![0m[0m
|
||||||
|
↳ from [4m?[0m in block: [2m:a = *[1]…[0m
|
||||||
|
--# post run check #--
|
||||||
|
--- text ---
|
||||||
|
| {}"[1,[2,3]]: " {}"*[1, *[2, 3]]" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{"f.checkpoint":#d, "f.reached":*{#c:1, #d:1}}
|
||||||
31
test/results/merge nested mutable error.ans
Normal file
31
test/results/merge nested mutable error.ans
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
--# run #--
|
||||||
|
--- error ---
|
||||||
|
[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31mabort[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error.ans:14:7[0m in call: [2merror("abort")[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error.ans:3:1[0m in block: [2minsert(a, b)…[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error.ans:3:18[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error.ans:3:17[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error.ans:3:17[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:29:6[0m in call: [2mfn![0m[0m
|
||||||
|
↳ from [4mscript.ans:27:3[0m in block: [2mresumed from = ()…[0m[0m
|
||||||
|
↳ from [4mscript.ans:27:5[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:27:3[0m in call: [2m~_[0m[0m
|
||||||
|
↳ from [4mscript.ans:27:3[0m in partial scope: [2m~_…[0m[0m
|
||||||
|
↳ from [4mscript.ans:23:2[0m in block: [2mfn . "current checkpoint" ~…[0m[0m
|
||||||
|
↳ from [4mscript.ans:23:9[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:23:7[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:23:7[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:37:9[0m in call: [2mvalue(s)![0m[0m
|
||||||
|
↳ from [4mscript.ans:36:1[0m in block: [2mvalue(s)![0m[0m
|
||||||
|
↳ from [4mscript.ans:36:20[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:36:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mscript.ans:36:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/merge nested mutable error.ans:19:2[0m in call: [2mf![0m[0m
|
||||||
|
↳ from [4m?[0m in block: [2m:a = *[1]…[0m
|
||||||
|
--# post run check #--
|
||||||
|
--- text ---
|
||||||
|
| {}"[1,[2,3]]: " {}"*[1, *[2, 3]]" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{"f.checkpoint":#d, "f.reached":*{#c:1, #d:1}}
|
||||||
10
test/results/merge nested mutable.ans
Normal file
10
test/results/merge nested mutable.ans
Normal 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}
|
||||||
42
test/results/scope checkpoint mutable bis error.ans
Normal file
42
test/results/scope checkpoint mutable bis error.ans
Normal 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 ---
|
||||||
|
[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31mt[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:32:7[0m in call: [2merror("t")[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:7:1[0m in block: [2minsert(t, len(l) + 1)…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:7:8[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:7:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:7:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:19:4[0m in call: [2mf(t)[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:15:2[0m in block: [2m| REC |…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:15:10[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:15:8[0m in call: [2mn < 1 ~ _[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:15:2[0m in partial scope: [2mn < 1 ~…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:7:1[0m in block: [2minsert(t, len(l) + 1)…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:7:8[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:7:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:7:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable bis error.ans:41:2[0m in call: [2mf(l)[0m[0m
|
||||||
|
↳ from [4m?[0m in block: [2m:x = *[99]…[0m
|
||||||
|
--# post run check #--
|
||||||
|
--- text ---
|
||||||
|
| {}"AFTER ERROR" |
|
||||||
|
--- text ---
|
||||||
|
| {}"l: " {}"*[1, *[99], 3, 4]" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{}
|
||||||
35
test/results/scope checkpoint mutable bis.ans
Normal file
35
test/results/scope checkpoint mutable bis.ans
Normal 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 #--
|
||||||
|
{}
|
||||||
38
test/results/scope checkpoint mutable error.ans
Normal file
38
test/results/scope checkpoint mutable error.ans
Normal 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 ---
|
||||||
|
[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31mt[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:23:7[0m in call: [2merror("t")[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:5:1[0m in block: [2minsert(t, len(l) + 1)…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:5:8[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:5:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:5:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:17:4[0m in call: [2mf(t)[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:13:2[0m in block: [2m| REC |…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:13:10[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:13:8[0m in call: [2mn < 1 ~ _[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:13:2[0m in partial scope: [2mn < 1 ~…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:5:1[0m in block: [2minsert(t, len(l) + 1)…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:5:8[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:5:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:5:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable error.ans:32:2[0m in call: [2mf(l)[0m[0m
|
||||||
|
↳ from [4m?[0m in block: [2m:l = *[1]…[0m
|
||||||
|
--# post run check #--
|
||||||
|
--- text ---
|
||||||
|
| {}"AFTER ERROR" |
|
||||||
|
--- text ---
|
||||||
|
| {}"l: " {}"*[1, 2, 3]" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{}
|
||||||
42
test/results/scope checkpoint mutable ter error.ans
Normal file
42
test/results/scope checkpoint mutable ter error.ans
Normal 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 ---
|
||||||
|
[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31m[0m[31mt[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:34:7[0m in call: [2merror("t")[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:7:1[0m in block: [2minsert(t, len(l) + 1)…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:7:8[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:7:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:7:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:19:4[0m in call: [2mf(t)[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:15:2[0m in block: [2m| REC |…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:15:10[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:15:8[0m in call: [2mn < 1 ~ _[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:15:2[0m in partial scope: [2mn < 1 ~…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:7:1[0m in block: [2minsert(t, len(l) + 1)…[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:7:8[0m in call: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:7:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:7:1[0m in return boundary: [2m_[0m[0m
|
||||||
|
↳ from [4mtest/tests/scope checkpoint mutable ter error.ans:43:2[0m in call: [2mf(l)[0m[0m
|
||||||
|
↳ from [4m?[0m in block: [2m:x = *[99]…[0m
|
||||||
|
--# post run check #--
|
||||||
|
--- text ---
|
||||||
|
| {}"AFTER ERROR" |
|
||||||
|
--- text ---
|
||||||
|
| {}"l: " {}"*[1, *[99, 12], 3, 4]" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{}
|
||||||
35
test/results/scope checkpoint mutable ter.ans
Normal file
35
test/results/scope checkpoint mutable ter.ans
Normal 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 #--
|
||||||
|
{}
|
||||||
25
test/results/scope checkpoint mutable.ans
Normal file
25
test/results/scope checkpoint mutable.ans
Normal 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 #--
|
||||||
|
{}
|
||||||
11
test/results/seen checkpoint resume.ans
Normal file
11
test/results/seen checkpoint resume.ans
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
--# run #--
|
||||||
|
--- text ---
|
||||||
|
| {}"a: " {}"0" {}"" |
|
||||||
|
--- text ---
|
||||||
|
| {}"a: " {}"1" {}"" |
|
||||||
|
--- text ---
|
||||||
|
| {}"a: " {}"2" {}"" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{"fn.checkpoint":#a, "fn.run":3}
|
||||||
11
test/results/unseen line.ans
Normal file
11
test/results/unseen line.ans
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
--# run #--
|
||||||
|
--- text ---
|
||||||
|
| {}"a" |
|
||||||
|
| {}"seen only once" |
|
||||||
|
| {}"b" |
|
||||||
|
| {}"a" |
|
||||||
|
| {}"b" |
|
||||||
|
--- return ---
|
||||||
|
()
|
||||||
|
--# saved #--
|
||||||
|
{"x.checkpoint":false, "x.run":2}
|
||||||
65
test/run.lua
65
test/run.lua
|
|
@ -5,6 +5,7 @@ local lfs = require("lfs")
|
||||||
package.path = "./?/init.lua;./?.lua;" .. package.path
|
package.path = "./?/init.lua;./?.lua;" .. package.path
|
||||||
local anselme = require("anselme")
|
local anselme = require("anselme")
|
||||||
local persistent_manager = require("anselme.state.persistent_manager")
|
local persistent_manager = require("anselme.state.persistent_manager")
|
||||||
|
local ast = require("anselme.ast")
|
||||||
|
|
||||||
-- simple random to get the same result across lua versions
|
-- simple random to get the same result across lua versions
|
||||||
local prev = 0
|
local prev = 0
|
||||||
|
|
@ -22,25 +23,7 @@ function math.random(a, b)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- run a test file and return the result
|
local function run_loop(run_state, out)
|
||||||
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 #--" }
|
|
||||||
|
|
||||||
while run_state:active() do
|
while run_state:active() do
|
||||||
local e, data = run_state:step()
|
local e, data = run_state:step()
|
||||||
table.insert(out, "--- "..e.." ---")
|
table.insert(out, "--- "..e.." ---")
|
||||||
|
|
@ -65,9 +48,51 @@ local function run(path)
|
||||||
table.insert(out, tostring(data))
|
table.insert(out, tostring(data))
|
||||||
end
|
end
|
||||||
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, "--# 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")
|
return table.concat(out, "\n")
|
||||||
end
|
end
|
||||||
|
|
|
||||||
24
test/tests/checkpoint merging mutable value.ans
Normal file
24
test/tests/checkpoint merging mutable value.ans
Normal 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")
|
||||||
24
test/tests/checkpoint merging variable.ans
Normal file
24
test/tests/checkpoint merging variable.ans
Normal 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
21
test/tests/commit.ans
Normal 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!
|
||||||
3
test/tests/custom event.ans
Normal file
3
test/tests/custom event.ans
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
|ah
|
||||||
|
wait(5)
|
||||||
|
|ho
|
||||||
5
test/tests/function conflict.ans
Normal file
5
test/tests/function conflict.ans
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
:$ f(a, b) 0
|
||||||
|
|
||||||
|
:$ f(x) 0
|
||||||
|
|
||||||
|
:$ f(a, b) 0
|
||||||
18
test/tests/function cycle.ans
Normal file
18
test/tests/function cycle.ans
Normal 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!
|
||||||
18
test/tests/function next.ans
Normal file
18
test/tests/function next.ans
Normal 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!
|
||||||
18
test/tests/function random.ans
Normal file
18
test/tests/function random.ans
Normal 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!
|
||||||
20
test/tests/interrupt callback nested paragraph.ans
Normal file
20
test/tests/interrupt callback nested paragraph.ans
Normal 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!
|
||||||
20
test/tests/interrupt callback nested.ans
Normal file
20
test/tests/interrupt callback nested.ans
Normal 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!
|
||||||
18
test/tests/interrupt callback.ans
Normal file
18
test/tests/interrupt callback.ans
Normal 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!
|
||||||
18
test/tests/interrupt no callback.ans
Normal file
18
test/tests/interrupt no callback.ans
Normal 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!
|
||||||
32
test/tests/map index accross checkpoints.ans
Normal file
32
test/tests/map index accross checkpoints.ans
Normal 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!
|
||||||
17
test/tests/merge nested mutable bis.ans
Normal file
17
test/tests/merge nested mutable bis.ans
Normal 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!
|
||||||
19
test/tests/merge nested mutable error bis.ans
Normal file
19
test/tests/merge nested mutable error bis.ans
Normal 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!
|
||||||
19
test/tests/merge nested mutable error.ans
Normal file
19
test/tests/merge nested mutable error.ans
Normal 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!
|
||||||
17
test/tests/merge nested mutable.ans
Normal file
17
test/tests/merge nested mutable.ans
Normal 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!
|
||||||
47
test/tests/scope checkpoint mutable bis error.ans
Normal file
47
test/tests/scope checkpoint mutable bis error.ans
Normal 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}
|
||||||
40
test/tests/scope checkpoint mutable bis.ans
Normal file
40
test/tests/scope checkpoint mutable bis.ans
Normal 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}
|
||||||
36
test/tests/scope checkpoint mutable error.ans
Normal file
36
test/tests/scope checkpoint mutable error.ans
Normal 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}
|
||||||
49
test/tests/scope checkpoint mutable ter error.ans
Normal file
49
test/tests/scope checkpoint mutable ter error.ans
Normal 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}
|
||||||
42
test/tests/scope checkpoint mutable ter.ans
Normal file
42
test/tests/scope checkpoint mutable ter.ans
Normal 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}
|
||||||
29
test/tests/scope checkpoint mutable.ans
Normal file
29
test/tests/scope checkpoint mutable.ans
Normal 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}
|
||||||
12
test/tests/seen checkpoint resume.ans
Normal file
12
test/tests/seen checkpoint resume.ans
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
: fn = "fn"!script($_)
|
||||||
|
|{run}
|
||||||
|
|
||||||
|
#a!checkpoint
|
||||||
|
|
||||||
|
|a: {run}
|
||||||
|
|
||||||
|
fn!from(#a)
|
||||||
|
|
||||||
|
fn!from(#a)
|
||||||
|
|
||||||
|
fn!from(#a)
|
||||||
7
test/tests/unseen line.ans
Normal file
7
test/tests/unseen line.ans
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
: x = "x"!script($_)
|
||||||
|
|a
|
||||||
|
run == 0 ~ |seen only once
|
||||||
|
|b
|
||||||
|
|
||||||
|
x!
|
||||||
|
x!
|
||||||
Loading…
Add table
Add a link
Reference in a new issue