cf7a2a51e5
Brugerkrav 25/9: alle river-typer skal virke. Nedlægningsområdet (runtime-felt eller riverens XML) måles i traktorens ramme mens riven arbejder; læssevognen på rivens kursus får CP-toolOffsetX = egen - skårets forskydning og får sin værdi tilbage når den slippes.
66 lines
3.8 KiB
Lua
66 lines
3.8 KiB
Lua
-- Kør: luajit tests/test_adCpBridge.lua (fra repo-roden)
|
|
-- Kun getWorkWidth: variabel bredde (Unrealistic Pack) vinder over AI-markørernes grundbredde.
|
|
dofile("FS25_ADSmartPickup/adCpBridge.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 withMarkers(width)
|
|
return {getAIMarkers = function() return 1, 2, 3, 4, width end}
|
|
end
|
|
|
|
-- W1: læssevogn med variabel bredde 20,4 + 20,4 = 40,8 m, AI-markører siger 2,4 m
|
|
local wagon = withMarkers(2.4)
|
|
wagon.getVariableWorkWidth = function(_, isLeft) return isLeft and 20.4 or -20.4, nil, true end
|
|
local tractor = {getAttachedImplements = function() return {{object = wagon}} end}
|
|
check("W1 variabel bredde", ADCpBridge.getWorkWidth(tractor), 40.8)
|
|
-- W2: ugyldig variabel bredde -> AI-markører
|
|
local plain = withMarkers(9.5)
|
|
plain.getVariableWorkWidth = function() return 0, nil, false end
|
|
check("W2 AI-markører", ADCpBridge.getWorkWidth(plain), 9.5)
|
|
-- W3: selvkørende slåmaskine uden redskaber, kun variabel bredde
|
|
local mower = {getVariableWorkWidth = function(_, isLeft) return isLeft and 20.4 or -20.4, nil, true end}
|
|
check("W3 selvkørende", ADCpBridge.getWorkWidth(mower), 40.8)
|
|
|
|
-- W4: Courseplays egen bredde (HUD'en) vinder — det er den marken køres med
|
|
local cpVehicle = {getVariableWorkWidth = function(_, isLeft) return isLeft and 20.4 or -0.4, nil, true end,
|
|
getCourseGeneratorSettings = function() return {workWidth = {getValue = function() return 40.8 end}} end}
|
|
check("W4 Courseplay-bredde", ADCpBridge.getWorkWidth(cpVehicle), 40.8)
|
|
-- W5: Courseplay-indstilling 0/ugyldig -> egen beregning
|
|
local zeroCp = {getVariableWorkWidth = function(_, isLeft) return isLeft and 5 or -5, nil, true end,
|
|
getCourseGeneratorSettings = function() return {workWidth = {getValue = function() return 0 end}} end}
|
|
check("W5 CP 0 -> egen beregning", ADCpBridge.getWorkWidth(zeroCp), 10)
|
|
|
|
-- WO: skårets sideforskydning på en river, målt fra nedlægningsområdet (venstre positiv), minus rivens
|
|
-- egen CP-forskydning. Noder er tal; localToLocal-mock giver nodens x i traktorens ramme.
|
|
local nodeX = {[11] = 2.0, [12] = 4.0, [21] = -1.0, [22] = 1.0}
|
|
function localToLocal(node) return nodeX[node] or 0, 0, 0 end
|
|
local function rake(dropIndex, runtime)
|
|
local areas = {
|
|
{start = 1, width = 2, height = 3, dropWindrowWorkAreaIndex = runtime and dropIndex or nil},
|
|
{start = 10, width = 11, height = 12},
|
|
{start = 20, width = 21, height = 22},
|
|
}
|
|
return {spec_windrower = {}, spec_workArea = {workAreas = areas}, configFileName = "rake.xml"}
|
|
end
|
|
local sideRake = rake(2, true)
|
|
local tractorWithRake = {rootNode = 100, getAttachedImplements = function() return {{object = sideRake}} end,
|
|
getCpSettings = function() return {toolOffsetX = {getValue = function() return 0.5 end}} end}
|
|
check("WO1 sideriver (runtime-felt)", ADCpBridge.getWindrowOffset(tractorWithRake), 2.5)
|
|
local centerRake = rake(3, true)
|
|
local tractorCenter = {rootNode = 100, getAttachedImplements = function() return {{object = centerRake}} end}
|
|
check("WO2 midterrive", ADCpBridge.getWindrowOffset(tractorCenter), 0)
|
|
-- WO3: runtime-felt mangler -> riverens XML (workArea(0) windrower#dropWindrowWorkAreaIndex = 2)
|
|
ADCpBridge.readDropIndicesFromXml = function(fileName) return fileName == "rake.xml" and {[1] = 2} or {} end
|
|
local xmlRake = rake(2, false)
|
|
local tractorXml = {rootNode = 100, getAttachedImplements = function() return {{object = xmlRake}} end}
|
|
check("WO3 fra XML", ADCpBridge.getWindrowOffset(tractorXml), 3)
|
|
check("WO4 ingen river -> nil", ADCpBridge.getWindrowOffset({rootNode = 100}), nil)
|
|
|
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
|
os.exit(failures == 0 and 0 or 1)
|