Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
@@ -3,15 +3,16 @@ from pathlib import Path
|
||||
import os,re
|
||||
from policy_harness import ROOT,body,run
|
||||
P=Path(os.environ.get('ERR_NATIVE_TRANSPORT_SOURCE',ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_NativeTransportProbe.c'))
|
||||
method=body(P,'protected bool MaintenanceStock(')
|
||||
method=body(P,'bool MaintenanceStock(')
|
||||
for forbidden in ('SetFuel','SetResource','Consume','Spawn(','TryMove','GetInVehicle','SetHealth','EnableDamage'):
|
||||
assert forbidden not in method,forbidden
|
||||
s=method.replace('protected ','').replace('array<','Array<').replace('foreach (','for (').replace('null','nullptr').replace('ResourceName','string')
|
||||
s=s.replace('InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(m_Site.Container.FindComponent(InventoryStorageManagerComponent));','Inventory* inventory = m_Site->Container->inventory;')
|
||||
s=s.replace('InventoryStorageManagerComponent inventory = InventoryStorageManagerComponent.Cast(site.Container.FindComponent(InventoryStorageManagerComponent));','Inventory* inventory = site->Container->inventory;')
|
||||
s=s.replace('SCR_ResourceComponent resource = SCR_ResourceComponent.Cast(item.FindComponent(SCR_ResourceComponent));','Resource* resource = item->resource;')
|
||||
s=s.replace('SCR_FuelManagerComponent fuel = SCR_FuelManagerComponent.Cast(item.FindComponent(SCR_FuelManagerComponent));','Fuel* fuel = item->fuel;')
|
||||
s=s.replace('SCR_ResourceContainer supplies;','Supply* supplies = nullptr;').replace('int kits, cans;','int kits=0, cans=0;')
|
||||
for var in ('m_Site','m_Mode','item','resource','supplies','fuel'):s=re.sub(r'\b'+var+r'\.',var+'->',s)
|
||||
for var in ('site','m_Mode','item','resource','supplies','fuel'):s=re.sub(r'\b'+var+r'\.',var+'->',s)
|
||||
s=s.replace('ERR_SiteRuntime site','Site* site')
|
||||
s=s.replace('Sites().','Sites()->').replace('GetPrefabData().','GetPrefabData()->')
|
||||
for ns in ('ERR_Inventory','Math','EResourceType'):s=s.replace(ns+'.',ns+'::')
|
||||
run(r'''
|
||||
@@ -44,27 +45,28 @@ int main(){
|
||||
Supply supplies;Resource resource{&supplies};Fuel fuel1,fuel2;
|
||||
site.Container=&container;container.inventory=&inventory;kit.prefab=&kitPrefab;kit.resource=&resource;
|
||||
can1.prefab=&canPrefab;can1.fuel=&fuel1;can2.prefab=&canPrefab;can2.fuel=&fuel2;
|
||||
inventory.items={&kit,&can1,&can2};assert(p.MaintenanceStock());
|
||||
inventory.items={&kit,&can1,&can2};assert(p.MaintenanceStock(&site));
|
||||
assert(supplies.amount==20&&fuel1.litres==5&&fuel2.litres==5); // inspection made no changes
|
||||
inventory.items.push_back(&can1);assert(p.MaintenanceStock()); // duplicate inventory enumeration is not extra stock
|
||||
inventory.items={&kit,&can1};assert(!p.MaintenanceStock());inventory.items={&kit,&can1,&can2};
|
||||
Item extraKit=kit;inventory.items.push_back(&extraKit);assert(!p.MaintenanceStock());inventory.items.pop_back();
|
||||
kit.owned=false;assert(!p.MaintenanceStock());kit.owned=true;
|
||||
can2.owned=false;assert(!p.MaintenanceStock());can2.owned=true;
|
||||
kit.resource=nullptr;assert(!p.MaintenanceStock());kit.resource=&resource;
|
||||
resource.supply=nullptr;assert(!p.MaintenanceStock());resource.supply=&supplies;
|
||||
can2.fuel=nullptr;assert(!p.MaintenanceStock());can2.fuel=&fuel2;
|
||||
for(float invalid:{0.f,19.f,21.f,NAN}){supplies.amount=invalid;assert(!p.MaintenanceStock());}supplies.amount=20;
|
||||
supplies.capacity=100;assert(!p.MaintenanceStock());supplies.capacity=20;
|
||||
for(float invalid:{0.f,4.f,6.f,NAN}){fuel2.litres=invalid;assert(!p.MaintenanceStock());}fuel2.litres=5;
|
||||
fuel1.capacity=5;assert(!p.MaintenanceStock());fuel1.capacity=20;
|
||||
string original=kitPrefab.name;kitPrefab.name="unrelated";assert(!p.MaintenanceStock());kitPrefab.name=original;
|
||||
std::vector<Item> unrelated(129);for(auto& item:unrelated)inventory.items.push_back(&item);assert(!p.MaintenanceStock());inventory.items={&kit,&can1,&can2};
|
||||
container.owned=false;assert(!p.MaintenanceStock());container.owned=true;
|
||||
container.inventory=nullptr;assert(!p.MaintenanceStock());container.inventory=&inventory;
|
||||
assert(p.MaintenanceStock());
|
||||
inventory.items.push_back(&can1);assert(p.MaintenanceStock(&site)); // duplicate inventory enumeration is not extra stock
|
||||
inventory.items={&kit,&can1};assert(!p.MaintenanceStock(&site));inventory.items={&kit,&can1,&can2};
|
||||
Item extraKit=kit;inventory.items.push_back(&extraKit);assert(!p.MaintenanceStock(&site));inventory.items.pop_back();
|
||||
kit.owned=false;assert(!p.MaintenanceStock(&site));kit.owned=true;
|
||||
can2.owned=false;assert(!p.MaintenanceStock(&site));can2.owned=true;
|
||||
kit.resource=nullptr;assert(!p.MaintenanceStock(&site));kit.resource=&resource;
|
||||
resource.supply=nullptr;assert(!p.MaintenanceStock(&site));resource.supply=&supplies;
|
||||
can2.fuel=nullptr;assert(!p.MaintenanceStock(&site));can2.fuel=&fuel2;
|
||||
for(float invalid:{0.f,19.f,21.f,NAN}){supplies.amount=invalid;assert(!p.MaintenanceStock(&site));}supplies.amount=20;
|
||||
supplies.capacity=100;assert(!p.MaintenanceStock(&site));supplies.capacity=20;
|
||||
for(float invalid:{0.f,4.f,6.f,NAN}){fuel2.litres=invalid;assert(!p.MaintenanceStock(&site));}fuel2.litres=5;
|
||||
fuel1.capacity=5;assert(!p.MaintenanceStock(&site));fuel1.capacity=20;
|
||||
string original=kitPrefab.name;kitPrefab.name="unrelated";assert(!p.MaintenanceStock(&site));kitPrefab.name=original;
|
||||
std::vector<Item> unrelated(129);for(auto& item:unrelated)inventory.items.push_back(&item);assert(!p.MaintenanceStock(&site));inventory.items={&kit,&can1,&can2};
|
||||
container.owned=false;assert(!p.MaintenanceStock(&site));container.owned=true;
|
||||
container.inventory=nullptr;assert(!p.MaintenanceStock(&site));container.inventory=&inventory;
|
||||
assert(p.MaintenanceStock(&site));
|
||||
assert(!p.MaintenanceStock(nullptr));
|
||||
}
|
||||
''')
|
||||
tick=body(P,'int Tick(')
|
||||
assert tick.index('if (!MaintenanceStock()) return -1;') < tick.index('IEntity driver = Character(0)')
|
||||
assert tick.index('if (!MaintenanceStock(m_Site)) return -1;') < tick.index('IEntity driver = Character(0)')
|
||||
print('PASS: actual maintenance native-stock check rejects missing/duplicate/wrong-identity/unowned/depleted/malformed stock and is read-only; native runtime not executed')
|
||||
|
||||
Reference in New Issue
Block a user