Integrate radio-delivered convoy cover and conservative squad ammunition reports
This commit is contained in:
@@ -66,3 +66,43 @@ int main(){
|
||||
}
|
||||
''')
|
||||
print('PASS: actual native fixture lookup selects exact BODY kind/identity/message from bounded evaluations, never sighting-only Get')
|
||||
|
||||
# Native ammo proof extends the already-real status delivery; it never changes gear or sender payloads.
|
||||
for forbidden in ('SetAmmoCount(', 'ClearChamber(', 'TryMoveItem', 'TryDelete', 'TrySpawn'):
|
||||
assert forbidden not in p.read_text(),forbidden
|
||||
native_ammo=body(p,'protected bool NativeAmmo(')
|
||||
for evidence in ('InitialMember(slot)', 'ERR_Actors.Alive(actor)', 'ERR_Actors.Group(actor) != unit.Group',
|
||||
'CanAttribute(slot, actor)', 'ERR_HQAmmoSampler.Inspect(actor, unit.Group, inspected)',
|
||||
'manager.GetWeaponsList(weapons)', 'loaded.GetAmmoCount()',
|
||||
'loadedIdentities.Contains(loaded.GetOwner())', 'queued.SmallArmsRounds >= nativeLoadedRounds',
|
||||
'SameAmmo(queued, inspected)', 'nativeLoadedRounds > 0'):
|
||||
assert evidence in native_ammo,evidence
|
||||
assert 'PendingStatus =' not in native_ammo and 'AmmoState =' not in native_ammo
|
||||
for frozen in ('m_AmmoAtQueue = m_Status.AmmoState.Snapshot()',
|
||||
'status.AmmoState != m_Status.AmmoState', 'status.AmmoState != m_AmmoAtQueue',
|
||||
'SameAmmo(status.AmmoState, m_AmmoAtQueue)', 'SameAmmo(stable.AmmoState, m_AmmoAtQueue)'):
|
||||
assert frozen in p.read_text(),frozen
|
||||
compare=body(p,'protected bool SameAmmo(').replace('protected ', '').replace('ERR_HQAmmoSnapshot ', 'ERR_HQAmmoSnapshot* ')
|
||||
compare=compare.replace('a.', 'a->').replace('b.', 'b->')
|
||||
run(r'''
|
||||
#include <cassert>
|
||||
struct ERR_HQAmmoSnapshot{
|
||||
bool Complete=true,LauncherComplete=false;
|
||||
int Members=5,SmallArmsMuzzles=5,SmallArmsRounds=150,SmallArmsMagazines=10,SmallArmsChambers=5;
|
||||
int LauncherRounds=2,LauncherMagazines=2,LauncherChambers=0;
|
||||
};
|
||||
struct Probe{
|
||||
'''+compare+r'''
|
||||
};
|
||||
int main(){
|
||||
Probe probe;ERR_HQAmmoSnapshot a,b;
|
||||
assert(probe.SameAmmo(&a,&b)&&!probe.SameAmmo(nullptr,&b)&&!probe.SameAmmo(&a,nullptr));
|
||||
int* fields[]={&b.Members,&b.SmallArmsMuzzles,&b.SmallArmsRounds,&b.SmallArmsMagazines,&b.SmallArmsChambers,
|
||||
&b.LauncherRounds,&b.LauncherMagazines,&b.LauncherChambers};
|
||||
for(auto* field:fields){(*field)++;assert(!probe.SameAmmo(&a,&b));(*field)--;}
|
||||
b.Complete=false;assert(!probe.SameAmmo(&a,&b));b.Complete=true;
|
||||
b.LauncherComplete=true;assert(!probe.SameAmmo(&a,&b));b.LauncherComplete=false;
|
||||
assert(probe.SameAmmo(&a,&b));
|
||||
}
|
||||
''')
|
||||
print('PASS: actual ammo snapshot comparison checks every scalar/category flag; native probe requires real roster rescan, loaded-round lower bound and separate immutable pending/Watch objects')
|
||||
|
||||
Reference in New Issue
Block a user