Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
42 lines
4.4 KiB
Python
42 lines
4.4 KiB
Python
from pathlib import Path
|
|
P=Path('/tmp/erri-launcher-resupply-1140');R=Path('/home/jakub/devel/escapistsrereintroduced');D=P/'tests';D.mkdir(exist_ok=True)
|
|
for name in ['test_infantry_ammo_transfer.py','test_infantry_resupply_planning.py','test_infantry_resupply_coordinator.py']:
|
|
s=(R/'tests'/name).read_text();bp=P/'baseline/tests'/name;bp.parent.mkdir(parents=True,exist_ok=True);bp.write_text(s)
|
|
if name=='test_infantry_ammo_transfer.py':
|
|
s=s.replace("'magazine','manager','weapon','muzzle'","'magazine','loaded','manager','weapon','muzzle'")
|
|
s=s.replace('struct Magazine{Well*well=', 'struct Magazine{IEntity owner=nullptr;IEntity GetOwner(){return owner;}Well*well=')
|
|
s=s.replace('struct Muzzle{Well*well=', 'struct Muzzle{Magazine*loaded=nullptr;Magazine*GetMagazine(){return loaded;}Well*well=')
|
|
s=s.replace('int SmallArmsMuzzles=1,', 'int Members=1,LauncherMagazines=1,LauncherRounds=0,LauncherChambers=0;bool Valid(int n){return n==Members;}int SmallArmsMuzzles=1,')
|
|
s=s.replace('struct Coordinator{ERR_GameMode*', 'struct Coordinator{bool m_LauncherTrip=false;ERR_GameMode*')
|
|
s=s.replace('int main(){', '''struct LauncherFixture:SupplyFixture{Entity loaded;Magazine empty;
|
|
LauncherFixture(){c.m_LauncherTrip=true;weapon.kind=EWeaponType::WT_GRENADELAUNCHER;muzzle.kind=EMuzzleType::MT_UGLMuzzle;
|
|
rifle.parent=&recipient;loaded.parent=&rifle;loaded.magazine=∅empty.owner=&loaded;empty.well=&well;empty.rounds=0;muzzle.loaded=∅}
|
|
};
|
|
int main(){
|
|
{LauncherFixture f;assert(!ERR_InfantryAmmoTransfer::Compatible(&f.recipient,&f.magEntity));assert(ERR_InfantryAmmoTransfer::Compatible(&f.recipient,&f.magEntity,true));
|
|
f.c.Transfer(0);assert(f.c.m_Move&&f.c.m_Move->Submitted()&&f.c.m_Spent.Count()==1&&f.source.calls==1);
|
|
f.Move();f.source.last->OnComplete();f.c.Transfer(1000);f.c.Transfer(2000);assert(f.c.m_Delivered==1&&f.source.calls==1&&f.c.m_Served.Count()==1);}
|
|
for(int bad=0;bad<7;bad++){LauncherFixture f;if(bad==0)f.magazine.used=true;if(bad==1)f.muzzle.well=nullptr;if(bad==2)f.muzzle.loaded=nullptr;if(bad==3)f.empty.well=nullptr;if(bad==4)f.loaded.parent=nullptr;if(bad==5)f.rifle.parent=nullptr;if(bad==6)f.empty.capacity=0;
|
|
f.c.Transfer(0);assert(!f.c.m_Move&&f.source.calls==0&&f.c.m_Spent.IsEmpty());}
|
|
{LauncherFixture f;f.source.accept=false;f.c.Transfer(0);assert(f.c.m_Move&&f.c.m_Move->Submitted()&&f.c.m_Move->Unresolved()&&f.c.m_Spent.Count()==1);f.c.Transfer(1000);assert(f.source.calls==1);f.Move();f.source.last->OnComplete();assert(!f.c.m_Move->Unresolved());}
|
|
{LauncherFixture f;auto t=ERR_InfantryAmmoTransfer(&f.mode,&f.truck,&f.donorGroup,&f.recipient,&f.recipientGroup,&f.magEntity,false,true);
|
|
f.source.effect=[&](){t.Stop();f.Move();};f.source.callback=1;assert(t.Tick(0)==FAILED&&!t.Unresolved()&&f.source.calls==1);assert(t.Tick(1)==FAILED);}
|
|
''')
|
|
elif name=='test_infantry_resupply_planning.py':
|
|
s=s.replace("'static bool MinePair(')","'static bool MinePair(', 'static bool LauncherNeed(', 'static bool LauncherPair(')")
|
|
s=s.replace("'bool TryPlanMines(',", "'bool TryPlanLauncher(', 'bool TryPlanMines(',")
|
|
s=s.replace('struct Ammo{', 'struct Ammo{bool LauncherComplete=true;int LauncherMagazines=1,LauncherRounds=0,LauncherChambers=0;')
|
|
s=s.replace('bool m_MineTrip=false,','bool m_LauncherTrip=false,m_MineTrip=false,')
|
|
s=s.replace('int main(){','''int main(){
|
|
{Fixture f;f.s.Stock(0);f.ammo.SmallArmsRounds=999;assert(!f.Plan());assert(f.s.TryPlanLauncher(&f.recipient,&f.donor,&f.demand,&f.donorStatus,0));assert(f.s.m_LauncherTrip&&!f.s.m_MineTrip);}
|
|
for(int bad=0;bad<7;bad++){Fixture f;f.s.Stock(0);f.ammo.SmallArmsRounds=999;if(bad==0)f.ammo.LauncherComplete=false;if(bad==1)f.ammo.LauncherMagazines=0;if(bad==2)f.ammo.LauncherRounds=1;if(bad==3)f.ammo.LauncherChambers=1;if(bad==4)f.ammo.Members=1;if(bad==5)f.demand.ObservedAt=-1;if(bad==6)f.demand.ObservedAt=1;
|
|
assert(!f.s.TryPlanLauncher(&f.recipient,&f.donor,&f.demand,&f.donorStatus,0));assert(f.s.m_State==1&&f.truck.SupplyToken==0);}
|
|
''')
|
|
else:
|
|
s=s.replace('m_MineTrip=false','m_MineTrip=false,m_LauncherTrip=false')
|
|
s=s.replace('int main(){','''int main(){
|
|
{Fixture f;Leaf leaf;f.s.m_Move=&leaf;f.s.m_LauncherTrip=true;f.truck.SupplyHeld=true;f.s.Stop();assert(f.s.m_State==7&&f.hq.token==7&&f.truck.SupplyHeld);
|
|
f.s.Tick(200000);assert(f.s.m_State==7&&f.hq.token==7&&f.s.transfers==0);leaf.unresolved=false;f.s.Tick(201000);assert(f.s.m_State==1&&f.hq.token==0&&!f.truck.SupplyHeld&&!f.s.m_Move);}
|
|
''')
|
|
(D/name).write_text(s)
|