Files
Viano-Core/tests/clientless/test_browser_admission.py
T

43 lines
2.2 KiB
Python

"""Execute the admission/formation rules used by the live server."""
from pathlib import Path
import subprocess
import tempfile
root=Path(__file__).resolve().parents[2]
code=r'''
#include "ClientlessBrowserRules.h"
#include "AdventureGroupPolicy.h"
#include <cassert>
int main(){
using ClientlessBrowserRules::Admit;
// Independent off-switches; the test override cannot defeat either switch.
for(bool queue:{false,true})for(bool enter:{false,true}){
assert(Admit(false,true,false,queue,enter));
assert(Admit(true,true,false,queue,enter)==(queue&&enter));
assert(!Admit(true,false,false,queue,enter));
assert(Admit(true,false,true,queue,enter)==(queue&&enter));
}
// Human departure invalidates the same concrete party's admission.
assert(Admit(true,true,false,true,true));assert(!Admit(true,false,false,true,true));
using namespace AdventureGroupPolicy;
assert(Eligible("pvp"));assert(Compatible("pvp","pvp",80,85));
assert(!Compatible("pvp","instance",80,80));
auto dungeon=RequiredRoles(5);assert(dungeon.Tanks==1&&dungeon.Healers==1&&dungeon.Damage==3);
auto raid=RequiredRoles(20);assert(raid.Tanks==2&&raid.Healers==4&&raid.Damage==14);
auto large=RequiredRoles(25);assert(large.Tanks+large.Healers+large.Damage==25);
for(unsigned i=0;i<10;++i){float social=float(i)/10;assert(MergeChance(social,300)>MergeChance(social,3600));}
assert(PreferMerge(2,4,false,false,false));
assert(!PreferMerge(4,2,false,false,true));
assert(!PreferMerge(3,3,false,false,false));assert(PreferMerge(3,3,false,false,true));
assert(PreferMerge(5,4,false,true,false)); // close the last role gap
assert(PreferMerge(4,2,true,false,false)); // move a surplus role into a legal group
assert(WorldPvP(5095)&&WorldPvP(3483)&&WorldPvP(3519)&&!WorldPvP(1519));
// Gathering never moves past the fixed end of an hour.
assert(DepartureAt(14*3600+57*60,15*3600)==15*3600);
}
'''
with tempfile.TemporaryDirectory() as directory:
p=Path(directory);(p/'rules.cpp').write_text(code)
subprocess.run(['g++','-std=c++17','-I'+str(root/'src/server/game/World'),str(p/'rules.cpp'),'-o',str(p/'rules')],check=True)
subprocess.run([str(p/'rules')],check=True)
print('Browser admission, last-human departure, independent switches, bot-only override, roles and formation progress passed.')