-- Kør: luajit tests/test_adStorageStats.lua (fra repo-roden) -- Lagerstatistik pr. vare: fyldning, værdi nu / ved toppris, gårdens samlede beholdning, dage tilbage. dofile("FS25_ADSmartPickup/adStorageStats.lua") local S = ADStorageStats 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 -- ST1: fuld beregning local st = S.itemStats({fillType = 5, level = 150000, capacity = 180000}, 412000, {consumption = 130000, production = 48000}, {price = 1.6, top = 2.0}) check("ST1 procent", st.percent, 83) check("ST1 værdi nu", st.valueNow, 240000) check("ST1 værdi top", st.valueTop, 300000) check("ST1 gårdens beholdning", st.farmTotal, 412000) check("ST1 dage på netto (412k / 82k)", math.floor(st.days * 10 + 0.5) / 10, 5.0) check("ST1 netto pr. døgn", st.net, -82000) -- ST2: ingen salgssted, intet forbrug, ingen kapacitet local st2 = S.itemStats({fillType = 6, level = 5000, capacity = 0}, 5000, nil, nil) check("ST2 ingen pris -> nil", st2.valueNow, nil) check("ST2 intet forbrug -> dage nil", st2.days, nil) check("ST2 kapacitet 0 -> procent nil", st2.percent, nil) -- ST3: bygningens samlede værdi (kun varer med pris) local total = S.buildingTotals({st, st2, S.itemStats({fillType = 7, level = 1000, capacity = 2000}, 1000, nil, {price = 2, top = 3})}) check("ST3 samlet nu", total.valueNow, 242000) check("ST3 samlet top", total.valueTop, 303000) -- ST4: gårdens totaler fra inventar local totals = S.farmTotals({{entries = {{fillType = 5, level = 100}, {fillType = 6, level = 5}}}, {entries = {{fillType = 5, level = 50}}}}) check("ST4 sum pr. vare", totals[5], 150) check("ST4 anden vare", totals[6], 5) -- ST5: foder-forbrug i et fælles trug fordeles efter truget indhold; tomt trug -> bedste foder local split = S.splitTroughConsumption(2400, {[116] = 3000, [7] = 1000}, {[116] = 1.0, [7] = 0.8}) check("ST5 TMR 75 %", split[116], 1800) check("ST5 ensilage 25 %", split[7], 600) local empty = S.splitTroughConsumption(2400, {}, {[116] = 1.0, [7] = 0.8}) check("ST5 tomt trug -> bedste foder", empty[116], 2400) check("ST5 tomt trug -> intet på ensilage", empty[7], nil) -- ST6: gitter — varer i rækker á n celler, tom liste giver én tom række local rows = S.chunk({"a", "b", "c", "d"}, 3) check("ST6 to rækker", #rows, 2) check("ST6 første række 3", #rows[1], 3) check("ST6 anden række 1", rows[2][1], "d") check("ST6 tom liste -> én tom række", #S.chunk({}, 3), 1) -- ST7: rate-kolonne: forbrug med minus, produktion med plus, intet -> streg local fmt = function(v) return string.format("%.1fk", v / 1000) end check("ST7 begge", S.rateText(14400, 3600, fmt), "-14.4k +3.6k") check("ST7 kun prod", S.rateText(0, 3600, fmt), "+3.6k") check("ST7 kun forbrug", S.rateText(2000, 0, fmt), "-2.0k") check("ST7 intet", S.rateText(0, 0, fmt), "-") -- ST8: fane pr. bygningstype — filtrér inventar på kind, rækkefølgen bevares local inv = {{kind = "silo", name = "A"}, {kind = "factory", name = "B"}, {kind = "silo", name = "C"}} local silos = S.filterKind(inv, "silo") check("ST8 to siloer", #silos, 2) check("ST8 rækkefølge", silos[2].name, "C") check("ST8 ingen stalde", #S.filterKind(inv, "husbandry"), 0) -- ST9: produktion ≥ forbrug -> beholdningen stiger, ingen dage local rising = S.itemStats({fillType = 8, level = 1000, capacity = 2000}, 6700000, {consumption = 11500000, production = 19200000}, nil) check("ST9 stiger -> dage nil", rising.days, nil) check("ST9 stiger-flag", rising.rising, true) check("ST1 falder -> ikke stiger", st.rising, false) check("ST2 intet forbrug -> ikke stiger", st2.rising, false) -- ST3: palleskur — procent af PLADSER (24 paller af 4000), ikke liter mod pladsantal (600 %) local egg = S.itemStats({fillType = 8, level = 24000, capacity = 4000000, count = 24, slots = 4000}, 24000, nil, nil) check("ST3 paller med", egg.count, 24) check("ST3 pladser med", egg.slots, 4000) check("ST3 procent af pladser", egg.percent, 1) print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)