-- 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)