77 lines
4.8 KiB
Lua
77 lines
4.8 KiB
Lua
-- Kør: luajit tests/test_adPool.lua (fra repo-roden)
|
|
dofile("FS25_ADSmartPickup/adFieldFleet.lua")
|
|
dofile("FS25_ADSmartPickup/adHitch.lua")
|
|
dofile("FS25_ADSmartPickup/adPool.lua")
|
|
local P = ADPool
|
|
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
|
|
-- rolle ud fra redskabets egne specs
|
|
check("rolle: plov", P.roleOf({spec_plow = true}), "plow")
|
|
check("rolle: kultivator", P.roleOf({spec_cultivator = true}), "cultivator")
|
|
check("rolle: vogn med tip", P.roleOf({spec_trailer = true, spec_dischargeable = true}), "unloader")
|
|
check("rolle: vogn der også er læssevogn er læssevogn", P.roleOf({spec_trailer = true, spec_dischargeable = true, spec_forageWagon = true}), "collector")
|
|
check("rolle: intet", P.roleOf({}), nil)
|
|
-- hk fra butiksdata: tal eller tabel (konfigurationer)
|
|
check("tal", P.numberOf(180), 180)
|
|
check("tabel: største", P.numberOf({base = 120, config = 150}), 150)
|
|
check("tom tabel", P.numberOf({}), nil)
|
|
check("nil", P.numberOf(nil), nil)
|
|
check("hk: nok", P.powerOk(200, 180), true)
|
|
check("hk: for lidt", P.powerOk(150, 180), false)
|
|
check("hk: redskab uden data", P.powerOk(150, nil), true)
|
|
check("hk: traktor uden data", P.powerOk(nil, 180), true)
|
|
-- Connect-markør til en parkering
|
|
local markers = {{name = "Start", id = 1}, {name = "Bredal", id = 4}, {name = "Connect Bredal", id = 9}, {name = "connect plov 1", id = 12}}
|
|
check("connect: Bredal", P.connectFor("Bredal", markers).id, 9)
|
|
check("connect: små bogstaver", P.connectFor("Plov 1", markers).id, 12)
|
|
check("connect: ingen", P.connectFor("Start", markers), nil)
|
|
check("connect: uden parkering", P.connectFor(nil, markers), nil)
|
|
-- parring: redskab nærmest marken, så traktor nærmest redskabet
|
|
local implements = {
|
|
{id = "plovFar", name = "Plov far", role = "plow", x = 500, z = 0, connectId = 20, parkId = 21},
|
|
{id = "plovNear", name = "Plov nær", role = "plow", x = 100, z = 0, neededHp = 180, connectId = 30, parkId = 31},
|
|
{id = "kult", name = "Kultivator", role = "cultivator", x = 0, z = 0, connectId = 40, parkId = 41},
|
|
}
|
|
local tractors = {
|
|
{id = "small", name = "Lille", x = 110, z = 0, hp = 120, parkId = 2},
|
|
{id = "big", name = "Stor", x = 300, z = 0, hp = 250, parkId = 3},
|
|
{id = "mid", name = "Mellem", x = 150, z = 0, hp = 190, parkId = 5},
|
|
}
|
|
local pair = P.pairFor("plow", 0, 0, implements, tractors, {})
|
|
check("par: nærmeste plov til marken", pair.implement.id, "plovNear")
|
|
check("par: nærmeste stærke traktor til ploven", pair.tractor.id, "mid")
|
|
local blockedPair = P.pairFor("plow", 0, 0, implements, tractors, {plovNear = true})
|
|
check("par: reserveret plov springes over", blockedPair.implement.id, "plovFar")
|
|
check("par: plov uden hk-krav tager nærmeste traktor", blockedPair.tractor.id, "big")
|
|
local none, why = P.pairFor("seeder", 0, 0, implements, tractors, {})
|
|
check("par: ingen såmaskine", none, nil); check("par: grund", why, "noPoolImplement")
|
|
local weak, weakWhy, weakArgs = P.pairFor("plow", 0, 0, {implements[2]}, {tractors[1]}, {})
|
|
check("par: for svag", weak, nil); check("par: grund tooWeak", weakWhy, "tooWeak"); check("par: hk i args", weakArgs[1], 180)
|
|
local noTractor, noTractorWhy = P.pairFor("plow", 0, 0, implements, {}, {})
|
|
check("par: ingen traktor", noTractor, nil); check("par: grund noPoolTractor", noTractorWhy, "noPoolTractor")
|
|
local rejected, rejectedWhy = P.pairFor("plow", 0, 0, implements, tractors, {}, function() return false end)
|
|
check("par: accept afviser alle", rejected, nil); check("par: grund", rejectedWhy, "noPoolImplement")
|
|
local multi = P.pairFor("fertilizer", 0, 0, {{id = "spreder", role = "fertilizer", roles = {fertilizer = true, liming = true}, x = 0, z = 0}}, tractors, {})
|
|
check("par: redskab med flere roller", multi.implement.id, "spreder")
|
|
-- reservationer og karantæne
|
|
P.reserve("F12", {"plovNear", "mid"})
|
|
check("reserveret: redskab", P.blocked(0).plovNear, true)
|
|
check("reserveret: traktor", P.blocked(0).mid, true)
|
|
P.release("F12")
|
|
check("frigivet", P.blocked(0).plovNear, nil)
|
|
P.quarantine("plovNear", 1000)
|
|
check("karantæne: aktiv", P.blocked(1000 + P.QUARANTINE_MS - 1).plovNear, true)
|
|
check("karantæne: udløbet", P.blocked(1000 + P.QUARANTINE_MS).plovNear, nil)
|
|
-- kø: længst ventende først, lige -> lavest mark-id, ikke-ventende bagerst i oprindelig rækkefølge
|
|
local infos = {{id = 5}, {id = 3}, {id = 9}, {id = 1}}
|
|
local ordered = P.queueOrder(infos, {[9] = 100, [3] = 50, [1] = 50})
|
|
check("kø: 1.", ordered[1].id, 1); check("kø: 2.", ordered[2].id, 3); check("kø: 3.", ordered[3].id, 9); check("kø: 4.", ordered[4].id, 5)
|
|
check("kø: rører ikke input", infos[1].id, 5)
|
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
|
os.exit(failures == 0 and 0 or 1)
|