Files
EscapistsReintroduced/tests/test_hq_delivered_casualties.py
T

55 lines
3.7 KiB
Python

"""Actual Enforce union methods: delivered body/status evidence is never summed."""
from pathlib import Path
import re
from policy_harness import ROOT, run
s=(ROOT/'addons/ai/Scripts/Game/ERR/ERR_HQDeliveredCasualties.c').read_text()
assert all(token not in s for token in ('IEntity','GetOrigin','GetWorld','GetPlayer','IsDestroyed','GetLifeState'))
code=s.replace('class ','struct ').replace('protected ','').replace('ref ','').replace('Math.','Math::')
code=code.replace('array<int> slots','Array<int>* slots').replace('slots.', 'slots->')
code=code.replace('array<int>','Array<int>').replace('foreach (','for (')
code=code.replace(' : slots)', ' : *slots)').replace('int m_Strength;', 'int m_Strength=0;')
code=code.replace('\n}\n','\n};\n')
run(r'''
#include <cassert>
#include <algorithm>
#include <vector>
struct Math {static int Min(int a,int b){return std::min(a,b);}};
template<class T>struct Array:std::vector<T>{using std::vector<T>::vector;
int Count(){return this->size();}bool Contains(T n){return std::find(this->begin(),this->end(),n)!=this->end();}
void Insert(T n){this->push_back(n);}void Clear(){this->clear();}};
'''+code+r'''
int main(){
ERR_HQDeliveredCasualties ledger;assert(!ledger.Bind(0)&&!ledger.Bind(33));
assert(!ledger.AcceptBody(0));assert(ledger.Bind(6));assert(!ledger.Bind(7));
Array<int> first{0,2};assert(ledger.AcceptStatus(&first,2,4));assert(ledger.Count()==2);
// Same body already confirmed by delivered status never adds a casualty.
assert(ledger.AcceptBody(0)&&ledger.AcceptBody(0)&&ledger.Count()==2);
// Different discovered body adds precisely one; identical rediscovery does not.
assert(ledger.AcceptBody(4)&&ledger.AcceptBody(4)&&ledger.Count()==3);
assert(ledger.LivingUpperBound(4)==3);
// Caller has not seen the outside discovery; valid unchanged status must still arrive.
assert(ledger.AcceptStatus(&first,2,4)&&ledger.Count()==3&&ledger.StatusCount()==2);
Array<int> later{0,2,4};assert(ledger.AcceptStatus(&later,3,3)&&ledger.Count()==3);
Array<int> disjoint{0,2,3,4};assert(ledger.AcceptStatus(&disjoint,4,2)&&ledger.Count()==4);
Array<int> malformed{0,0,2};assert(!ledger.AcceptStatus(&malformed,3,3)&&ledger.Count()==4);
Array<int> outOfRange{0,2,3,4,6};assert(!ledger.AcceptStatus(&outOfRange,5,1)&&ledger.Count()==4);
Array<int> missing{0,2,4};assert(!ledger.AcceptStatus(&missing,3,3));
assert(!ledger.AcceptStatus(&disjoint,3,2)&&!ledger.AcceptStatus(&disjoint,4,3));
assert(!ledger.AcceptStatus(nullptr,0,6)&&!ledger.AcceptBody(-1)&&!ledger.AcceptBody(6));
assert(ledger.AcceptBody(1)&&ledger.AcceptBody(5)&&ledger.Closed()&&ledger.Count()==6);
assert(ledger.LivingUpperBound(-1)==0&&ledger.LivingUpperBound(6)==0);
assert(ledger.Bind(6)&&ledger.Count()==6); // duplicate binding never resets delivered evidence
// Complete wipe can be established from delivered visible bodies even without any check-in.
ERR_HQDeliveredCasualties wiped;assert(wiped.Bind(32));
assert(wiped.LivingUpperBound(-1)==-1&&!wiped.Closed());
for(int slot=31;slot>=0;slot--)for(int replay=0;replay<4;replay++)assert(wiped.AcceptBody(slot));
assert(wiped.Count()==32&&wiped.StatusCount()==0&&wiped.Closed());
Array<int> unknown{};assert(wiped.AcceptStatus(&unknown,0,32));
assert(wiped.Count()==32&&wiped.LivingUpperBound(32)==0); // delayed status cannot reopen known dead roster
// Same numerical slot belongs to separate independent formations, never a global casualty ID.
ERR_HQDeliveredCasualties other;assert(other.Bind(2)&&other.AcceptBody(0)&&other.Count()==1);
assert(ledger.Count()==6&&wiped.Count()==32);
}
''')
print('PASS: actual delivered slot-union bodies preserve overlap/disjoint evidence, replay idempotence, status subset integrity, full-wipe closure and formation-local bounds')