Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
"""Run the production search commitment state machine; not a native flight test."""
|
||||
from policy_harness import ROOT, body, run
|
||||
path = ROOT / 'addons/core/Scripts/Game/ERR/10_AI/ERR_ReconFlightComponent.c'
|
||||
policy = body(path, 'class ERR_ReconSearchTask')
|
||||
policy = policy.replace('class ERR_ReconSearchTask', 'struct ERR_ReconSearchTask').replace('Math.', 'Math::') + ';'
|
||||
run(r'''
|
||||
#include <cassert>
|
||||
#include <algorithm>
|
||||
struct Math {
|
||||
static float Max(float a,float b){return std::max(a,b);}
|
||||
static float Clamp(float a,float lo,float hi){return std::clamp(a,lo,hi);}
|
||||
};
|
||||
''' + policy + r'''
|
||||
int main() {
|
||||
ERR_ReconSearchTask task{};
|
||||
assert(!task.Tick(1000,0));
|
||||
assert(!task.Accept(-1,1000));
|
||||
assert(!task.Accept(1001,1000));
|
||||
assert(!task.Accept(0,60001));
|
||||
assert(task.Accept(1000,61000)); // freshness boundary accepted
|
||||
// The reported RKS failure: report expires while heli still 1.4km away.
|
||||
for(int t=62000;t<=400000;t+=1000) assert(task.Tick(t,1446));
|
||||
assert(task.SearchedMs==0);
|
||||
assert(!task.Accept(1000,400000)); // replay cannot renew travel allowance
|
||||
// Only time near the reported area consumes its search budget.
|
||||
assert(task.Tick(401000,650));
|
||||
assert(task.SearchedMs==1000);
|
||||
assert(task.Tick(402000,651));
|
||||
assert(task.SearchedMs==1000);
|
||||
for(int t=403000;t<=520000;t+=1000) assert(task.Tick(t,300));
|
||||
assert(!task.Tick(521000,300));
|
||||
assert(!task.Accept(1000,521000)); // exhausted report not selected again
|
||||
assert(task.Accept(521000,521000)); // a genuinely new sighting renews search
|
||||
assert(task.Tick(522000,300));
|
||||
assert(!task.Accept(520000,522000)); // older target can't displace newest
|
||||
assert(task.Accept(522000,522000));
|
||||
assert(task.SearchedMs==0);
|
||||
// Native crew sighting wins, including over earlier HQ reports arriving late.
|
||||
task.Cancel(530000);
|
||||
assert(!task.Active && !task.Accept(529000,531000));
|
||||
assert(task.Accept(531000,531000));
|
||||
assert(task.Tick(1430999,2000));
|
||||
assert(!task.Tick(1431000,2000)); // finite fifteen-minute unreachable approach
|
||||
assert(!task.Accept(531000,1431000));
|
||||
// Time spent on another task is not counted as local searching on return.
|
||||
ERR_ReconSearchTask interrupted{};
|
||||
assert(interrupted.Accept(1000,1000));
|
||||
assert(interrupted.Tick(500000,300));
|
||||
assert(interrupted.SearchedMs==5000);
|
||||
}
|
||||
''')
|
||||
print('PASS: expired-report approach, arrival-only search, completion, newer/older/replayed reports, visual priority, interrupted search and bounded travel')
|
||||
Reference in New Issue
Block a user