89 lines
6.2 KiB
Python
89 lines
6.2 KiB
Python
"""Exercise actual Core alias, integer parsing and settings-boundary bodies.
|
|
Native dispatch/storage and remote ownership remain separate tests.
|
|
"""
|
|
from policy_harness import ROOT,body,run
|
|
admin=ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_AdminService.c'
|
|
settings=ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_Settings.c'
|
|
rules='\n'.join(body(path,sig) for path,sig in ((admin,'static string CoreSetting('),(admin,'static bool Integer('),(settings,'static bool Valid(')))
|
|
rules=(rules.replace('string ', 'std::string ').replace('out int ', 'int& ')
|
|
.replace('text.Length()', 'int(text.size())').replace('.IsEmpty()', '.empty()')
|
|
.replace('.Substring(', '.substr(').replace('"0123456789".IndexOf(', 'std::string("0123456789").find(')
|
|
.replace(' < 0) return false;', ' == std::string::npos) return false;').replace('text.ToInt()', 'std::stoi(text)'))
|
|
run('#include <cassert>\n#include <string>\n'+rules+r'''
|
|
int main(){
|
|
assert(CoreSetting("mission","telemetry")=="telemetryEnabled");
|
|
assert(Valid("telemetryEnabled",0)&&Valid("telemetryEnabled",1));
|
|
assert(!Valid("telemetryEnabled",-1)&&!Valid("telemetryEnabled",2));
|
|
assert(CoreSetting("intel","radiosites")=="radioIntelSiteCount");
|
|
assert(Valid("radioIntelSiteCount",0)&&Valid("radioIntelSiteCount",5)&&Valid("radioIntelSiteCount",20));
|
|
assert(!Valid("radioIntelSiteCount",-1)&&!Valid("radioIntelSiteCount",21));
|
|
assert(CoreSetting("mission","doctrine")=="aiDoctrine");
|
|
assert(CoreSetting("mission","aishadow")=="aiShadow");
|
|
assert(CoreSetting("mission","restartempty")=="restartOnEmpty");
|
|
assert(CoreSetting("mission","emptyhours")=="emptyRestartHours");
|
|
assert(Valid("restartOnEmpty",0)&&Valid("restartOnEmpty",1));
|
|
assert(!Valid("restartOnEmpty",-1)&&!Valid("restartOnEmpty",2));
|
|
assert(Valid("emptyRestartHours",0)&&Valid("emptyRestartHours",1)&&Valid("emptyRestartHours",5)&&Valid("emptyRestartHours",168));
|
|
assert(!Valid("emptyRestartHours",-1)&&!Valid("emptyRestartHours",169));
|
|
for(std::string key:{"aiDoctrine","aiShadow"}){ assert(Valid(key,0)&&Valid(key,1)); assert(!Valid(key,-1)&&!Valid(key,2)); }
|
|
assert(CoreSetting("mission","motorbikes")=="motorbikeCount");
|
|
assert(CoreSetting("mission","sarkapoints")=="sarkaAngerPerCar");
|
|
assert(Valid("sarkaAngerPerCar",0)&&Valid("sarkaAngerPerCar",1)&&Valid("sarkaAngerPerCar",30));
|
|
assert(!Valid("sarkaAngerPerCar",-1)&&!Valid("sarkaAngerPerCar",31));
|
|
assert(Valid("motorbikeCount",0)&&Valid("motorbikeCount",2)&&Valid("motorbikeCount",6));
|
|
assert(!Valid("motorbikeCount",-1)&&!Valid("motorbikeCount",7));
|
|
assert(CoreSetting("mission","planealtitude")=="planeAltitudeMetres");
|
|
assert(Valid("planeAltitudeMetres",150)&&Valid("planeAltitudeMetres",250)&&Valid("planeAltitudeMetres",500));
|
|
assert(!Valid("planeAltitudeMetres",149)&&!Valid("planeAltitudeMetres",501)&&!Valid("planeAltitudeMetres",-1));
|
|
assert(CoreSetting("mission","planereplacement")=="planeReplacementSeconds");
|
|
assert(Valid("planeReplacementSeconds",30)&&Valid("planeReplacementSeconds",60)&&Valid("planeReplacementSeconds",1800));
|
|
assert(!Valid("planeReplacementSeconds",29)&&!Valid("planeReplacementSeconds",1801)&&!Valid("planeReplacementSeconds",-1));
|
|
assert(CoreSetting("mission","planesector")=="planeSectorSeconds");
|
|
assert(Valid("planeSectorSeconds",30)&&Valid("planeSectorSeconds",120)&&Valid("planeSectorSeconds",600));
|
|
assert(!Valid("planeSectorSeconds",29)&&!Valid("planeSectorSeconds",601)&&!Valid("planeSectorSeconds",-1));
|
|
assert(CoreSetting("mission","plane")=="planeReconEnabled");
|
|
assert(Valid("planeReconEnabled",0)&&Valid("planeReconEnabled",1));
|
|
assert(!Valid("planeReconEnabled",-1)&&!Valid("planeReconEnabled",2));
|
|
assert(CoreSetting("mission","camps")=="fieldCampCount");
|
|
assert(CoreSetting("mission","hospitals")=="fieldHospitalCount");
|
|
assert(Valid("fieldCampCount",1)&&Valid("fieldCampCount",12)&&Valid("fieldCampCount",16));
|
|
assert(!Valid("fieldCampCount",0)&&!Valid("fieldCampCount",17));
|
|
assert(Valid("fieldHospitalCount",1)&&Valid("fieldHospitalCount",6)&&Valid("fieldHospitalCount",8));
|
|
assert(!Valid("fieldHospitalCount",0)&&!Valid("fieldHospitalCount",9));
|
|
|
|
assert(CoreSetting("intel","sites")=="showAllSites");
|
|
assert(Valid("showAllSites",0)&&Valid("showAllSites",1));
|
|
assert(!Valid("showAllSites",-1)&&!Valid("showAllSites",2));
|
|
assert(CoreSetting("intel","reveal")=="intelRevealChancePercent");
|
|
assert(CoreSetting("mission","radio")=="radioDefenceSeconds");
|
|
assert(CoreSetting("mission","objectguards")=="objectGuardCount");
|
|
assert(CoreSetting("mission","objectevery")=="objectGuardEvery");
|
|
assert(CoreSetting("mission","objecthq")=="objectGuardHQMode");
|
|
assert(CoreSetting("hq","objectguards").empty());
|
|
assert(Valid("objectGuardCount",0)&&Valid("objectGuardCount",8)&&Valid("objectGuardCount",16));
|
|
assert(!Valid("objectGuardCount",-1)&&!Valid("objectGuardCount",17));
|
|
for(std::string section:{"", "hq", "mission", "intel", "unknown"})
|
|
for(std::string option:{"", "interval", "carrying", "radio", "reveal", "unknown"}){
|
|
bool recognized=(section=="intel"&&option=="reveal")||(section=="mission"&&option=="radio");
|
|
assert(CoreSetting(section,option).empty()==!recognized);
|
|
}
|
|
assert(CoreSetting("mission","largeroadblocks")=="largeRoadblockCount");
|
|
assert(CoreSetting("mission","mainroadwidth")=="mainRoadWidthMetres");
|
|
assert(Valid("largeRoadblockCount",0)&&Valid("largeRoadblockCount",30)&&!Valid("largeRoadblockCount",31)&&!Valid("largeRoadblockCount",-1));
|
|
assert(Valid("mainRoadWidthMetres",5)&&Valid("mainRoadWidthMetres",6)&&Valid("mainRoadWidthMetres",12)&&!Valid("mainRoadWidthMetres",4)&&!Valid("mainRoadWidthMetres",13));
|
|
int parsed=-1;
|
|
for(std::string malformed:{"", "-1", "+1", "1.0", "10junk", "1e2", "0x10", " 50", "50 ", "1234567"})
|
|
assert(!Integer(malformed,parsed));
|
|
for(int value=0;value<=101;++value){
|
|
assert(Integer(std::to_string(value),parsed)&&parsed==value);
|
|
assert(Valid(CoreSetting("intel","reveal"),parsed)==(value<=100));
|
|
}
|
|
assert(Integer("000050",parsed)&&parsed==50);
|
|
assert(Integer("999999",parsed)&&!Valid("intelRevealChancePercent",parsed));
|
|
assert(!Valid("intelRevealChancePercent",-1));
|
|
assert(Valid("radioDefenceSeconds",30)&&Valid("radioDefenceSeconds",1800));
|
|
assert(!Valid("radioDefenceSeconds",29)&&!Valid("radioDefenceSeconds",1801));
|
|
}
|
|
''')
|
|
print('PASS: Core document-discovery alias, companion-only alias exclusion, strict integer parsing and setting boundaries')
|