aboutsummaryrefslogtreecommitdiff
path: root/advtrains/spec/atcjit_spec.lua
diff options
context:
space:
mode:
authorywang <yw05@forksworld.de>2021-04-23 15:54:45 +0200
committerywang <yw05@forksworld.de>2021-06-09 15:31:21 +0200
commit17d1308241bfb13790285ca1df7a58cce7505150 (patch)
tree8c8cb45e2c94cdaf2000e0e540531475df611106 /advtrains/spec/atcjit_spec.lua
parent0dc140c7a7e736cc9e24c8f531b9f80fe941a409 (diff)
downloadadvtrains-17d1308241bfb13790285ca1df7a58cce7505150.tar.gz
advtrains-17d1308241bfb13790285ca1df7a58cce7505150.tar.bz2
advtrains-17d1308241bfb13790285ca1df7a58cce7505150.zip
Rename unittest directory
Diffstat (limited to 'advtrains/spec/atcjit_spec.lua')
-rw-r--r--advtrains/spec/atcjit_spec.lua179
1 files changed, 179 insertions, 0 deletions
diff --git a/advtrains/spec/atcjit_spec.lua b/advtrains/spec/atcjit_spec.lua
new file mode 100644
index 0000000..638e5c8
--- /dev/null
+++ b/advtrains/spec/atcjit_spec.lua
@@ -0,0 +1,179 @@
+package.path = "../?.lua;" .. package.path
+advtrains = {}
+_G.advtrains = advtrains
+function _G.attrans(...) return ... end
+function advtrains.invert_train() end
+function advtrains.train_ensure_init() end
+
+local atcjit = require("atcjit")
+
+local function assert_atc(train, warn, err, res)
+ local w, e = atcjit.execute(train.id,train)
+ assert.same(err, e)
+ if w then assert.same(warn, w) end
+ assert.same(res, train)
+end
+
+local function thisatc(desc, train, warn, err, res)
+ it(desc, function() assert_atc(train, warn, err, res) end)
+end
+
+describe("simple ATC track", function()
+ local t = {
+ atc_arrow = true,
+ atc_command = " B12WB8WBBWOLD15ORD15OCD1RS10WSM",
+ door_open = 0,
+ max_speed = 20,
+ tarvelocity = 10,
+ velocity = 0,
+ }
+ thisatc("should make the train slow down to 12", t, {}, nil,{
+ atc_arrow = true,
+ atc_brake_target = 12,
+ atc_command = "B8WBBWOLD15ORD15OCD1RS10WSM",
+ atc_wait_finish = true,
+ door_open = 0,
+ max_speed = 20,
+ tarvelocity = 10,
+ velocity = 0,
+ })
+ thisatc("should make the train brake to 8", t, {}, nil, {
+ atc_arrow = true,
+ atc_brake_target = 8,
+ atc_command = "BBWOLD15ORD15OCD1RS10WSM",
+ atc_wait_finish = true,
+ door_open = 0,
+ max_speed = 20,
+ tarvelocity = 8,
+ velocity = 0,
+ })
+ thisatc("should make the train stop", t, {}, nil, {
+ atc_arrow = true,
+ atc_brake_target = -1,
+ atc_command = "OLD15ORD15OCD1RS10WSM",
+ atc_wait_finish = true,
+ door_open = 0,
+ max_speed = 20,
+ tarvelocity = 0,
+ velocity = 0,
+ })
+ thisatc("should make the train open its left doors", t, {}, nil, {
+ atc_arrow = true,
+ atc_brake_target = -1,
+ atc_command = "ORD15OCD1RS10WSM",
+ atc_delay = 15,
+ atc_wait_finish = true,
+ door_open = -1,
+ max_speed = 20,
+ tarvelocity = 0,
+ velocity = 0,
+ })
+ thisatc("should make the train open its right doors", t, {}, nil,{
+ atc_arrow = true,
+ atc_brake_target = -1,
+ atc_command = "OCD1RS10WSM",
+ atc_delay = 15,
+ atc_wait_finish = true,
+ door_open = 1,
+ max_speed = 20,
+ tarvelocity = 0,
+ velocity = 0,
+ })
+ thisatc("should make the train close its doors", t, {}, nil, {
+ atc_arrow = true,
+ atc_brake_target = -1,
+ atc_command = "RS10WSM",
+ atc_delay = 1,
+ atc_wait_finish = true,
+ door_open = 0,
+ max_speed = 20,
+ tarvelocity = 0,
+ velocity = 0,
+ })
+ thisatc("should make the train depart and accelerate to 10", t, {}, nil, {
+ atc_arrow = true,
+ atc_brake_target = -1,
+ atc_command = "SM",
+ atc_delay = 1,
+ atc_wait_finish = true,
+ door_open = 0,
+ max_speed = 20,
+ tarvelocity = 10,
+ velocity = 0,
+ })
+ thisatc("should make the train accelerate to 20", t, {}, nil, {
+ atc_arrow = true,
+ atc_brake_target = -1,
+ atc_delay = 1,
+ atc_wait_finish = true,
+ door_open = 0,
+ max_speed = 20,
+ tarvelocity = 20,
+ velocity = 0,
+ })
+end)
+
+describe("ATC track with whitespaces", function()
+ local t = {
+ atc_command = " \t\n OC \n S20 \r "
+ }
+ thisatc("should not cause errors", t, {}, nil, {
+ door_open = 0,
+ tarvelocity = 20,
+ })
+end)
+
+describe("empty ATC track", function()
+ local t = {atc_command = ""}
+ thisatc("should not do anything", t, {}, nil, {})
+end)
+
+describe("ATC track with nested I statements", function()
+ local t = {
+ atc_arrow = false,
+ atc_command = "I+OREI>5I<=10S16WORES12;D15;;OC",
+ velocity = 10,
+ door_open = 0,
+ }
+ thisatc("should make the train accelerate to 16", t, {}, nil,{
+ atc_arrow = false,
+ atc_command = "ORD15OC",
+ atc_wait_finish = true,
+ velocity = 10,
+ door_open = 0,
+ tarvelocity = 16,
+ })
+end)
+
+describe("ATC track with invalid statement", function()
+ local t = { atc_command = "Ifoo" }
+ thisatc("should report an error", t, {}, "Invalid command or malformed I statement: Ifoo", t)
+end)
+
+describe("ATC track with invalid I condition", function()
+ local t = { atc_command = "I?;" }
+ thisatc("should report an error", t, {}, "Invalid I statement", t)
+end)
+
+describe("ATC track reusing existing code", function()
+ local t = { atc_command = " B12WB8WBBWOLD15ORD15OCD1RS10WSM", tarvelocity = 15 }
+ thisatc("should do the same thing as in the first test", t, {}, nil, {
+ atc_brake_target = 12,
+ atc_command = "B8WBBWOLD15ORD15OCD1RS10WSM",
+ atc_wait_finish = true,
+ tarvelocity = 12
+ })
+end)
+
+describe("ATC track reusing malformed code", function()
+ local t = {atc_command = "I?;"}
+ thisatc("should report the invalid I statement", t, {}, "Invalid I statement", t)
+end)
+
+describe("ATC track that sets ARS modes", function()
+ local t = {atc_command = "A0WA1WAFWAT"}
+ thisatc("should disable ARS on the train with A0", t, {}, nil, {atc_wait_finish=true, ars_disable=true, atc_command="A1WAFWAT"})
+ thisatc("should enable ARS on the train with A1", t, {}, nil, {atc_wait_finish=true, ars_disable=false, atc_command="AFWAT"})
+ thisatc("should disable ARS on the train with AF", t, {}, nil, {atc_wait_finish=true, ars_disable=true, atc_command="AT"})
+ thisatc("should enable ARS on the train with AT", t, {}, nil, {atc_wait_finish=true, ars_disable=false,})
+end) \ No newline at end of file