Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
67 lines
4.5 KiB
Python
67 lines
4.5 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","doctrine")=="aiDoctrine");
|
|
assert(CoreSetting("mission","aishadow")=="aiShadow");
|
|
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(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","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);
|
|
}
|
|
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')
|