56 lines
2.6 KiB
Lua
56 lines
2.6 KiB
Lua
-- Kør: luajit tests/test_adSupplyPlanner.lua (fra repo-roden)
|
|
-- Tester de rene behovs-funktioner; ingen spil- eller AutoDrive-mocks nødvendige.
|
|
|
|
dofile("FS25_ADSmartPickup/adSupplyPlanner.lua")
|
|
|
|
local HAY, GRASS, SILAGE = 20, 21, 22
|
|
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
|
|
|
|
-- scoreNeed: tommere lager scorer højere; ugyldig kapacitet giver 0
|
|
check("tomt scorer højere end halvfuldt", ADSupplyPlanner.scoreNeed(0, 1000, 1000) > ADSupplyPlanner.scoreNeed(500, 1000, 500), true)
|
|
check("kapacitet 0 giver score 0", ADSupplyPlanner.scoreNeed(0, 0, 0), 0)
|
|
|
|
-- rankNeeds: mest trængende først, fulde springes over, input muteres ikke
|
|
local needs = {
|
|
{fillType = HAY, level = 80000, capacity = 100000},
|
|
{fillType = GRASS, level = 20000, capacity = 100000},
|
|
{fillType = SILAGE, level = 99500, capacity = 100000},
|
|
}
|
|
local ranked = ADSupplyPlanner.rankNeeds(needs)
|
|
check("fuld ingrediens springes over", #ranked, 2)
|
|
check("mest trængende først", ranked[1].fillType, GRASS)
|
|
check("dernæst næstmest trængende", ranked[2].fillType, HAY)
|
|
check("freeSpace beregnes", ranked[1].freeSpace, 80000)
|
|
check("input muteres ikke", needs[1].freeSpace, nil)
|
|
check("tom liste giver tom liste", #ADSupplyPlanner.rankNeeds({}), 0)
|
|
|
|
-- rankNeeds: deterministisk ved lige score (laveste fillType først)
|
|
local tie = ADSupplyPlanner.rankNeeds({
|
|
{fillType = SILAGE, level = 0, capacity = 5000},
|
|
{fillType = HAY, level = 0, capacity = 5000},
|
|
})
|
|
check("lige score -> laveste fillType først", tie[1].fillType, HAY)
|
|
|
|
-- resolveIngredients
|
|
local multi = {HAY, GRASS}
|
|
local resolved = ADSupplyPlanner.resolveIngredients(nil, multi)
|
|
check("multi-valg bliver ingrediensliste", #resolved, 2)
|
|
check("listen er en kopi", resolved ~= multi, true)
|
|
check("enkelt-valg uden tilstand -> nil", ADSupplyPlanner.resolveIngredients(nil, {HAY}), nil)
|
|
local state = {ingredients = {HAY, GRASS, SILAGE}, narrowedTo = GRASS}
|
|
check("indsnævret valg genbruger gemt liste", #ADSupplyPlanner.resolveIngredients(state, {GRASS}), 3)
|
|
check("bruger valgte andet -> nil", ADSupplyPlanner.resolveIngredients(state, {HAY}), nil)
|
|
check("nyt multi-valg erstatter gemt liste", #ADSupplyPlanner.resolveIngredients(state, {HAY, SILAGE}), 2)
|
|
check("ugyldigt valg -> nil", ADSupplyPlanner.resolveIngredients(state, nil), nil)
|
|
|
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
|
os.exit(failures == 0 and 0 or 1)
|