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)