Build independent base gameplay and source-bound native verification
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
"""Exercise the production structural-ticket check after post-commit death.
|
||||
No synthetic fixture is claimed as network/owner-RPC proof.
|
||||
"""
|
||||
from policy_harness import ROOT, body, run
|
||||
path = ROOT/'addons/core/Scripts/Game/ERR/ERR_CasualtyLoadingService.c'
|
||||
physical = body(path, 'protected bool PhysicalTicket(')
|
||||
physical = (physical.replace('protected ', '').replace('ERR_CasualtyLoadTicket ticket', 'Ticket* ticket')
|
||||
.replace('ticket.', 'ticket->').replace('m_Mode.', 'm_Mode->')
|
||||
.replace('ERR_Phase.EXTRACTION', '4').replace('ERR_Actors.Alive', 'Alive')
|
||||
.replace('ERR_CasualtyLoadingRules.TransportBench', 'TransportBench').replace('null', 'nullptr'))
|
||||
policy = '\n'.join(body(path, signature) for signature in ['static bool ObserveTicket(', 'static bool Within('])
|
||||
run('''#include <cassert>
|
||||
struct Entity { bool alive=true; };
|
||||
bool Alive(Entity* entity){return entity && entity->alive;}
|
||||
bool TransportBench(Entity* seat,Entity* aircraft){return seat && aircraft;}
|
||||
struct Ticket { Entity* Aircraft; Entity* Casualty; Entity* Seat; };
|
||||
struct Mode {
|
||||
Entity* aircraft; bool active=true; int phase=4;
|
||||
bool Active(){return active;} int Phase(){return phase;}
|
||||
Entity* ExtractionVehicle(){return aircraft;}
|
||||
};
|
||||
''' + policy + '''
|
||||
struct Service { Mode* m_Mode;
|
||||
''' + physical + '''
|
||||
};
|
||||
int main(){
|
||||
Entity aircraft, body, bench; Mode mode{&aircraft}; Service service{&mode};
|
||||
Ticket ticket{&aircraft,&body,&bench};
|
||||
assert(service.PhysicalTicket(&ticket));
|
||||
body.alive=false; // server death after authorization; owner commit can still be in flight
|
||||
assert(service.PhysicalTicket(&ticket));
|
||||
assert(ObserveTicket(true,service.PhysicalTicket(&ticket),false));
|
||||
assert(!ObserveTicket(false,service.PhysicalTicket(&ticket),false));
|
||||
assert(Within(1000,8999,8000)); // keep observation reservation through its budget
|
||||
assert(!Within(1000,9000,8000)); // eventually release, without another owner command
|
||||
ticket.Casualty=nullptr; assert(!service.PhysicalTicket(&ticket));
|
||||
ticket.Casualty=&body; ticket.Seat=nullptr; assert(!service.PhysicalTicket(&ticket));
|
||||
ticket.Seat=&bench; aircraft.alive=false; assert(!service.PhysicalTicket(&ticket));
|
||||
aircraft.alive=true; mode.active=false; assert(!service.PhysicalTicket(&ticket));
|
||||
mode.active=true; mode.phase=5; assert(!service.PhysicalTicket(&ticket));
|
||||
}
|
||||
''')
|
||||
print('PASS: actual committed-ticket structure preserves reservation after death, rejects missing bodies/seats and ends at observation expiry')
|
||||
Reference in New Issue
Block a user