aboutsummaryrefslogtreecommitdiff
path: root/advtrains/spec/speed_spec.lua
blob: 97f8ffae926b6077a7fe40c8ec3146f39f4b68fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package.path = "../?.lua;" .. package.path
advtrains = {}
_G.advtrains = advtrains
local speed = require("speed")

describe("Arithmetic functions on speed restrictions", function()
	it("should work", function()
		local a = math.random()
		local b = math.random(20)
		-- This test is basically a "typo check"
		assert.is_true (speed.lessp(a, b))
		assert.is_false(speed.greaterp(a, b))
		assert.is_false(speed.not_lessp(a, b))
		assert.is_true (speed.not_greaterp(a, b))
		assert.is_false(speed.lessp(a, a))
		assert.is_false(speed.greaterp(a, a))
		assert.is_true (speed.equalp(a, a))
		assert.is_false(speed.not_equalp(a, a))
		assert.equal(b, speed.max(a, b))
		assert.equal(a, speed.min(a, b))
	end)
	it("should handle -1", function()
		assert.is_false(speed.lessp(-1, math.random()))
	end)
	it("should handle nil", function()
		assert.is_true(speed.greaterp(nil, math.random()))
	end)
	it("should handle mixed nil and -1", function()
		assert.is_true(speed.equalp(nil, -1))
	end)
end)

describe("The speed restriction setter", function()
	it("should set the signal aspect", function()
		local t = {speed_restrictions_t = {x = 5, y = 9}}
		local u = {speed_restrictions_t = {x = 7, y = 9}, speed_restriction = 7}
		speed.merge_aspect(t, {main = 7, type = "x"})
		assert.same(u, t)
	end)
	it("should work with existing signal aspect tables", function()
		local t = {speed_restrictions_t = {main = 5, foo = 3}}
		local u = {speed_restrictions_t = {main = 7, foo = 3}, speed_restriction = 3}
		speed.merge_aspect(t, {main = 7})
		assert.same(u, t)
	end)
	it("should work with distant signals", function()
		local t = {speed_restrictions_t = {main = 5}}
		local u = {speed_restrictions_t = {main = 5}, speed_restriction = 5}
		speed.merge_aspect(t, {})
		assert.same(u, t)
	end)
	it("should create the restriction table if necessary", function()
		local t = {speed_restriction = 5}
		local u = {speed_restriction = 3, speed_restrictions_t = {main = 5, foo = 3}}
		speed.merge_aspect(t, {main = 3, type = "foo"})
		assert.same(u, t)
	end)
	it("should also create the restriction table for trains without any speed limit", function()
		local t = {}
		local u = {speed_restrictions_t = {}}
		speed.merge_aspect(t, {})
		assert.same(u, t)
	end)
	it("should set the speed restriction to nil if that is the case", function()
		local t = {speed_restriction = math.random(20)}
		local u = {speed_restrictions_t = {main = -1}}
		speed.merge_aspect(t, {main = -1})
		assert.same(u, t)
	end)
end)