Files
EscapistsReintroduced/tests/test_recovery_policy.py
T
jakub 6a667d8deb Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
2026-10-13 22:52:53 +02:00

24 lines
1.3 KiB
Python

from policy_harness import ROOT, body, run
p = ROOT / 'addons/core/Scripts/Game/ERR/00_Core/ERR_RecoveryService.c'
rules = body(p, 'static int SurvivorKind(') + '\n' + body(p, 'static bool NeedsRescuer(') + '\n' + body(p, 'static bool Stalled(') + '\n' + body(p, 'static bool DefeatDue(')
run('''#include <cassert>
''' + rules + '''
int main() {
assert(!Stalled(0,3,0,0,true,true));
assert(Stalled(0,3,0,0,true,false));
assert(Stalled(0,2,0,0,true));
assert(!Stalled(1,2,0,0,true)); assert(!Stalled(0,2,1,0,true));
assert(!Stalled(0,2,0,1,true)); assert(!Stalled(0,0,0,0,true)); assert(!Stalled(0,2,0,0,false));
assert(!DefeatDue(-1,40000)); assert(!DefeatDue(1000,30999)); assert(DefeatDue(1000,31000)); assert(!DefeatDue(1000,999));
for (int flags=0;flags<16;flags++) {
bool alive=flags&1, connected=flags&2, same=flags&4, conscious=flags&8;
int expected=!alive?0:(!connected||!same)?1:conscious?2:3;
assert(SurvivorKind(alive,connected,same,conscious)==expected);
}
for (int conscious=0;conscious<=12;conscious++)
for (int incapacitated=0;incapacitated<=12;incapacitated++)
assert(NeedsRescuer(conscious,incapacitated)==(conscious==0&&incapacitated>0));
}
''')
print('PASS: recovery state excludes dead bodies, preserves reservations, requires controlled rescuers and distinguishes empty/all-dead teams')