-- Kør: luajit tests/test_adFieldsShape.lua (fra repo-roden) -- Markens form-fingeraftryk (genbrug af Courseplay-kurser): antal hjørner, areal og tyngdepunkt, afrundet så -- små float-forskelle ikke tæller — men en ændret mark (nyt hjørne, flyttet kant) giver en ny signatur. dofile("FS25_ADSmartPickup/adFields.lua") 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 local function rect(x0, z0, w, h) return {{x = x0, z = z0}, {x = x0 + w, z = z0}, {x = x0 + w, z = z0 + h}, {x = x0, z = z0 + h}} end -- S1: rektangel 1600 x 600 -> 4 hjørner, 960.000 m², tyngdepunkt (800, 300) check("S1 rektangel", ADFields.shapeSignature(rect(0, 0, 1600, 600)), "n=4;a=960000;c=800,300") -- S2: omløbsretning er ligegyldig (arealet er absolut) local reversed = {} for index = 4, 1, -1 do table.insert(reversed, rect(0, 0, 1600, 600)[index]) end check("S2 modsat omløb", ADFields.shapeSignature(reversed), "n=4;a=960000;c=800,300") -- S3: små float-forskelle (cm) tæller ikke local noisy = rect(0.0003, -0.0002, 1600.0004, 599.9997) check("S3 float-støj", ADFields.shapeSignature(noisy), "n=4;a=960000;c=800,300") -- S4: flyttet kant (1 m bredere) -> ny signatur check("S4 kant flyttet", ADFields.shapeSignature(rect(0, 0, 1601, 600)) ~= ADFields.shapeSignature(rect(0, 0, 1600, 600)), true) -- S5: ekstra hjørne på kanten (samme areal) -> ny signatur local extra = {{x = 0, z = 0}, {x = 800, z = 0}, {x = 1600, z = 0}, {x = 1600, z = 600}, {x = 0, z = 600}} check("S5 ekstra hjørne", ADFields.shapeSignature(extra), "n=5;a=960000;c=800,300") -- S6: samme form et andet sted på kortet -> anden signatur check("S6 flyttet mark", ADFields.shapeSignature(rect(100, 0, 1600, 600)), "n=4;a=960000;c=900,300") -- S7: tom/ingen polygon -> nil check("S7 tom", ADFields.shapeSignature({}), nil) check("S8 nil", ADFields.shapeSignature(nil), nil) -- S9: under 3 hjørner er ingen flade -> nil check("S9 to punkter", ADFields.shapeSignature({{x = 0, z = 0}, {x = 1, z = 1}}), nil) -- S10: trekant: areal 50, tyngdepunkt (10/3, 10/3) -> (3, 3) check("S10 trekant", ADFields.shapeSignature({{x = 0, z = 0}, {x = 10, z = 0}, {x = 0, z = 10}}), "n=3;a=50;c=3,3") -- S11: negative koordinater afrundes symmetrisk check("S11 negative", ADFields.shapeSignature(rect(-1000, -500, 200, 100)), "n=4;a=20000;c=-900,-450") print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)