#include "../hyper.h" #include #include namespace hr { namespace tests { int errors = 0; string test_eq(hyperpoint h1, hyperpoint h2, ld err = 1e-6) { if(sqhypot_d(MDIM, h1 -h2) < err) return lalign(0, "OK ", h1, " ", h2); else { errors++; return lalign(0, "ERROR", " ", h1, " ", h2); } } string test_eq(transmatrix T1, transmatrix T2, ld err = 1e-6) { if(eqmatrix(T1, T2, err)) return "OK"; else { errors++; return "ERROR"; } } int readArgs() { using namespace arg; if(0) ; else if(argis("-test-dist")) { start_game(); shift(); int d = argi(); vector l = currentmap->allcells(); int unknown = 0; for(cell *c1: l) if(c1->cpdist <= d) for(cell *c2: l) if(c2->cpdist <= d) { int cd = celldistance(c1, c2); int bcd = bounded_celldistance(c1, c2); if(bcd == DISTANCE_UNKNOWN) unknown++; else if(cd != bcd) { errors++; println(hlog, "distance error: ", tie(c1,c2), " cd = ", cd, " bcd = ", bcd); } } int q = 0; for(cell *c: l) if(c->cpdist <= d) q++; println(hlog, "cells checked: ", q, " errors: ", errors, " unknown: ", unknown, " in: ", full_geometry_name()); if(errors) exit(1); } else if(argis("-test-gp")) { for(int a=0; a<9; a++) for(int b=0; b<9; b++) { println(hlog, tie(a, b)); stop_game(); if(!gp::check_whirl_set(gp::loc{a, b})) continue; start_game(); println(hlog, tie(a,b), " successful as ", full_geometry_name()); } } else if(argis("-test-bt")) { PHASEFROM(3); for(int i=0; i descs; for(cell *c: currentmap->allcells()) { auto c1 = c; if(nilv::get_nsi() == 0) c1 = c->cmove(0)->cmove(1)->cmove(3)->cmove(4)->cmove(2); if(nilv::get_nsi() == 2) c1 = c->cmove(0)->cmove(2)->cmove(4)->cmove(7); if(nilv::get_nsi() == -2) c1 = c->cmove(0)->cmove(1)->cmove(2)->cmove(3)->cmove(5); // only 4x4 -7 if(c1 != c) invalid++; if(c1 != c && nilv::get_nsi() == 0) descs.push_back(lalign(0, nilv::get_coord(c->master), nilv::get_coord(c1->master))); if(c1 != c && nilv::get_nsi() == 2) descs.push_back(lalign(0, nilv::get_coord(c->master), nilv::get_coord(c1->master))); } println(hlog, "invalid: ", invalid, " out of ", isize(currentmap->allcells())); sort(descs.begin(), descs.end()); for(auto d: descs) println(hlog, d); if(nilv::get_nsi() == -2) println(hlog, "gamestart = ", hybrid::get_where(currentmap->gamestart())); } else return 1; return 0; } auto hooks = addHook(hooks_args, 100, readArgs); // Bolza:: genus 2 => Euler characteristic -2 // octagon: -2/6 // ~> 6 octagons } }