-- Kør: luajit tests/test_adFieldFleet.lua (fra repo-roden) dofile("FS25_ADSmartPickup/adFieldModel.lua") dofile("FS25_ADSmartPickup/adFieldFleet.lua") local F = ADFieldFleet 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 -- FL1: rolle ud fra redskabets spec (læssevogn vinder over andet på samme køretøj) check("FL1 slåmaskine", F.roleFromSpecs({spec_mower = true}), "mower") check("FL1 vender", F.roleFromSpecs({spec_tedder = true}), "tedder") check("FL1 river", F.roleFromSpecs({spec_windrower = true}), "rake") check("FL1 læssevogn", F.roleFromSpecs({spec_forageWagon = true, spec_mower = true}), "collector") check("FL1 intet", F.roleFromSpecs({spec_trailer = true}), nil) local function rig(id, role, x, extra) local r = {id = id, role = role, enabled = true, busy = false, controlled = false, width = 40.8, x = x, z = 0, label = id} for k, v in pairs(extra or {}) do r[k] = v end return r end -- FL2: nærmeste ledige med flueben og rigtig rolle local picked = F.pick({rig("far", "mower", 500), rig("near", "mower", 50), rig("wagon", "collector", 10)}, "mower", 0, 0, nil) check("FL2 nærmeste slåmaskine", picked.id, "near") -- FL3: uden flueben / optaget / spiller i sædet springes over local _, why = F.pick({rig("a", "mower", 1, {enabled = false})}, "mower", 0, 0) check("FL3 intet med flueben", why, "noRig") local _, whyBusy = F.pick({rig("a", "mower", 1, {busy = true}), rig("b", "mower", 2, {controlled = true})}, "mower", 0, 0) check("FL3 alle optaget", whyBusy, "allBusy") check("FL3 ingen med rollen", select(2, F.pick({rig("a", "tedder", 1)}, "mower", 0, 0)), "noRig") -- FL4: læssevogn smallere end slåbredden springes over, bredere vælges local wide = F.pick({rig("smal", "collector", 1, {width = 20}), rig("bred", "collector", 900, {width = 40.8})}, "collector", 0, 0, 40.8) check("FL4 bred valgt selv om længere væk", wide.id, "bred") -- FL5: kun for smalle -> grund tooNarrow med tal local none, whyNarrow, args = F.pick({rig("smal", "collector", 1, {width = 20})}, "collector", 0, 0, 40.8) check("FL5 ingen", none, nil); check("FL5 grund", whyNarrow, "tooNarrow"); check("FL5 bredde", args[1], 20) -- FL6: over 50 m -> tooWide check("FL6 for bred", select(2, F.pick({rig("x", "mower", 1, {width = 60})}, "mower", 0, 0)), "tooWide") -- FL7: toggle giver ny tabel local enabled = {a = true} local toggled = F.toggle(enabled, "b") check("FL7 b til", toggled.b, true); check("FL7 original urørt", enabled.b, nil) check("FL7 a fra", F.toggle(toggled, "a").a, nil) -- FL8: nye roller i prioriteret rækkefølge check("FL8 høster", F.roleFromSpecs({spec_combine = true, spec_cutter = true}), "harvester") check("FL8 såmaskine før kultivator (combi)", F.roleFromSpecs({spec_sowingMachine = true, spec_cultivator = true, sprayRole = "fertilizer"}), "seeder") check("FL8 kultivator", F.roleFromSpecs({spec_cultivator = true}), "cultivator") check("FL8 plov", F.roleFromSpecs({spec_plow = true}), "plow") check("FL8 tromle", F.roleFromSpecs({spec_roller = true}), "roller") check("FL8 strigle", F.roleFromSpecs({spec_weeder = true}), "weeder") check("FL8 stubhakker", F.roleFromSpecs({spec_mulcher = true}), "mulcher") check("FL8 gødningssprøjte", F.roleFromSpecs({sprayRole = "fertilizer"}), "fertilizer") check("FL8 kalkspreder", F.roleFromSpecs({sprayRole = "limer"}), "limer") check("FL8 ukrudtssprøjte", F.roleFromSpecs({sprayRole = "weeder"}), "weeder") check("FL8 aflæsningsvogn", F.roleFromSpecs({canUnload = true}), "unloader") check("FL8 traktor med plov er ikke aflæsningsvogn", F.roleFromSpecs({spec_plow = true, canUnload = true}), "plow") -- FL9: accept-filter (fx høster der kan tage afgrøden, strigle kun til småt ukrudt) local combineWheat = rig("jd", "harvester", 10, {fruits = {[3] = true}}) local combineBeet = rig("ropa", "harvester", 1, {fruits = {[9] = true}}) local forWheat = F.pick({combineBeet, combineWheat}, "harvester", 0, 0, nil, function(c) return c.fruits[3] == true end) check("FL9 høster der kan tage hvede", forWheat.id, "jd") local _, whyFruit = F.pick({combineBeet}, "harvester", 0, 0, nil, function(c) return c.fruits[3] == true end) check("FL9 ingen kan tage afgrøden", whyFruit, "cannotDo") -- FL10: flere sæt til multi-tool — alle eller ingen, nærmeste først local m1, m2, m3 = rig("m1", "mower", 30), rig("m2", "mower", 10), rig("m3", "mower", 20, {busy = true}) local two = F.pickMany({m1, m2, m3}, "mower", 2, 0, 0) check("FL10 to valgt", #two, 2) check("FL10 nærmeste først", two[1].id, "m2") local none, whyMany, args = F.pickMany({m1, m2, m3}, "mower", 3, 0, 0) check("FL10 for få -> ingen", none, nil) check("FL10 grund", whyMany, "notEnough") check("FL10 ledige/krævet", args[1] .. "/" .. args[2], "2/3") check("FL10 ingen med rollen", select(2, F.pickMany({m1}, "tedder", 1, 0, 0)), "noRig") -- FL11: markflådens tilstand: alle ledige maskiner (standard) eller kun med flueben check("FL11 alle: uden flueben med", F.isEnabled("all", {}, "v1"), true) check("FL11 flueben: uden flueben ude", F.isEnabled("ticked", {}, "v1"), false) check("FL11 flueben: med flueben", F.isEnabled("ticked", {v1 = true}, "v1"), true) check("FL11 ukendt tilstand = alle", F.isEnabled(nil, {}, "v1"), true) print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)