97 lines
4.3 KiB
Lua
97 lines
4.3 KiB
Lua
-- Kør: luajit tests/test_adWaitPool.lua (fra repo-roden)
|
|
-- Wait-puljen: kandidater pr. mappe, reservationer, nærmeste ledige, rutetjek, redirect.
|
|
|
|
dofile("FS25_ADSmartPickup/adSupplyPlanner.lua")
|
|
dofile("FS25_ADSmartPickup/adWaitPool.lua")
|
|
|
|
local failures = 0
|
|
local function check(name, actual, expected)
|
|
if actual == expected then
|
|
print("OK " .. name)
|
|
else
|
|
failures = failures + 1
|
|
print(string.format("FAIL %s: forventede %s, fik %s", name, tostring(expected), tostring(actual)))
|
|
end
|
|
end
|
|
|
|
local markers, wayPoints = {}, {}
|
|
local function addMarker(id, name, group, x, z)
|
|
wayPoints[id] = {id = id, x = x, z = z, incoming = {}}
|
|
local marker = {id = id, markerIndex = #markers + 1, name = name, group = group}
|
|
table.insert(markers, marker)
|
|
return marker
|
|
end
|
|
local unreachable = {}
|
|
local adEnv = {
|
|
ADGraphManager = {
|
|
getMapMarkers = function() return markers end,
|
|
getMapMarkerByWayPointId = function(_, id) for _, m in ipairs(markers) do if m.id == id then return m end end end,
|
|
getWayPointById = function(_, id) return wayPoints[id] end,
|
|
getPathTo = function(_, vehicle, id) if unreachable[id] then return {} end return {{id = id}} end,
|
|
pathFromTo = function(_, from, to) if unreachable[to] then return {} end return {{id = to}} end,
|
|
},
|
|
}
|
|
getWorldTranslation = function(node) return node.x, 0, node.z end
|
|
|
|
addMarker(10, "cow wait 1", "cow wait", 0, 0)
|
|
addMarker(11, "cow wait 2", "cow wait", 50, 0)
|
|
addMarker(20, "Wait 3", "General Wait", 10, 0)
|
|
addMarker(30, "silo 1", "silo", 5, 0)
|
|
|
|
-- W1: kandidater
|
|
check("W1 kun mappen", #ADWaitPool.getCandidates(adEnv, "cow wait"), 2)
|
|
check("W1 tom pulje = alle Wait-mapper", #ADWaitPool.getCandidates(adEnv, ""), 3)
|
|
check("W1 nil = alle", #ADWaitPool.getCandidates(adEnv, nil), 3)
|
|
|
|
-- W2: nærmeste ledige fra vognens position; reserverede springes over; egen reservation OK
|
|
local v1, v2 = {name = "v1", rootNode = {x = 45, z = 0}}, {name = "v2", rootNode = {x = 45, z = 0}}
|
|
check("W2 nærmeste", ADWaitPool.pickFree(adEnv, v1, "cow wait").marker.id, 11)
|
|
ADWaitPool.claim(11, v1)
|
|
check("W2 reserveret springes over", ADWaitPool.pickFree(adEnv, v2, "cow wait").marker.id, 10)
|
|
check("W2 egen reservation genbruges", ADWaitPool.pickFree(adEnv, v1, "cow wait").marker.id, 11)
|
|
|
|
-- W3: claim / owner / release
|
|
check("W3 ejer", ADWaitPool.getOwner(11), v1)
|
|
ADWaitPool.releaseVehicle(v1)
|
|
check("W3 frigivet", ADWaitPool.getOwner(11), nil)
|
|
check("W3 nu ledig for v2", ADWaitPool.pickFree(adEnv, v2, "cow wait").marker.id, 11)
|
|
|
|
-- W4: nåelighed
|
|
unreachable[11] = true
|
|
check("W4 uopnåelig nærmeste -> næste", ADWaitPool.pickFree(adEnv, v2, "cow wait", function(c) return ADWaitPool.hasRouteTo(adEnv, v2, c.marker.id) end).marker.id, 10)
|
|
check("W4 hasRouteTo false", ADWaitPool.hasRouteTo(adEnv, v2, 11), false)
|
|
check("W4 hasRouteBothWays true", ADWaitPool.hasRouteBothWays(adEnv, v2, 10, 30), true)
|
|
check("W4 hasRouteBothWays hjem uopnåelig", ADWaitPool.hasRouteBothWays(adEnv, v2, 10, 11), false)
|
|
unreachable[11] = nil
|
|
check("W4 intet punkt -> nil", ADWaitPool.pickFree(adEnv, v2, "cow wait", function() return false end), nil)
|
|
|
|
-- W5: getClaims sorteret på mappe, dernæst id
|
|
ADWaitPool.claim(20, v2)
|
|
ADWaitPool.claim(10, v1)
|
|
local claims = ADWaitPool.getClaims(adEnv)
|
|
check("W5 to reservationer", #claims, 2)
|
|
check("W5 første = General Wait", claims[1].marker.group, "General Wait")
|
|
check("W5 anden = cow wait 1", claims[2].marker.id, 10)
|
|
ADWaitPool.releaseVehicle(v1)
|
|
ADWaitPool.releaseVehicle(v2)
|
|
check("W5 alt frigivet", #ADWaitPool.getClaims(adEnv), 0)
|
|
|
|
-- W6: redirect stopper trigger-aktivitet og sætter sti
|
|
local stopped = {}
|
|
local task = {
|
|
destinationID = 99, state = 1,
|
|
vehicle = {ad = {
|
|
trailerModule = {isActiveAtTrigger = function() return true end, stopUnloading = function() stopped.unload = true end, stopLoading = function() stopped.load = true end},
|
|
drivePathModule = {setPathTo = function(_, id) stopped.pathTo = id end},
|
|
}},
|
|
}
|
|
ADWaitPool.STATE_DRIVING = 2
|
|
ADWaitPool.redirect(task, 10)
|
|
check("W6 destination", task.destinationID, 10)
|
|
check("W6 state driving", task.state, 2)
|
|
check("W6 setPathTo", stopped.pathTo, 10)
|
|
check("W6 stopUnloading", stopped.unload, true)
|
|
|
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
|
os.exit(failures == 0 and 0 or 1)
|