1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-27 14:37:16 +00:00
hyperrogue/rogueviz/dhrg/tests.cpp
2024-04-28 02:11:14 +02:00

92 lines
2.4 KiB
C++

// check whether our distance and tallycounter algorithms work correctly
namespace dhrg {
void test_paths(int radius) {
celllister cl(croot(), radius, 1000000, NULL);
int N = isize(cl.lst);
printf("N = %d\n", N);
vector<mycell*> mycells;
for(cell *c: cl.lst)
mycells.push_back(find_mycell_by_path(computePath(c)));
int ctable[MAXDIST];
for(int u=0; u<MAXDIST; u++)
ctable[u] = 0;
int errorcount = 0;
for(int i=0; i<N; i++) {
cell *c = cl.lst[i];
mycell *mc = mycells[i];
cell *c1 = mc->ascell();
if(c != c1) {
printf("ascell error %s / %s\n", computePath(c).c_str(), computePath(c1).c_str());
c->item = itEmerald;
c1->item = itRuby;
errorcount++;
return;
}
}
for(int i=0; i<N; i++)
for(int j=0; j<N; j++) {
int a = celldistance(cl.lst[i], cl.lst[j]);
int b = quickdist(mycells[i], mycells[j]);
if(a != b) {
printf("celldistance = %d\n", a);
printf("quickdist = %d\n", b);
celllister cl2(cl.lst[i], 10, 1500, cl.lst[j]);
if(cl2.listed(cl.lst[j]))
printf("actual distance = %d\n", cl2.getdist(cl.lst[j]));
cl.lst[i]->item = itDiamond;
cl.lst[j]->item = itSilver;
errorcount++;
return;
}
else ctable[a]++;
}
for(mycell* mc1: mycells) for(mycell* mc2: mycells) {
add_to_set(mc1, 1, 0);
add_to_tally(mc2, 1, 0);
// int v = 0;
if(tally[quickdist(mc1, mc2)] != 1) {
printf("[%p] [%p]\n", (void*) mc1, (void*) mc2);
printf("quickdist = %d\n", quickdist(mc1, mc2));
for(int i=0; i<MAXDIST; i++) if(tally[i]) printf("in tally = %d\n", i);
mc1->ascell()->item = itDiamond;
mc2->ascell()->item = itSilver;
errorcount++;
add_to_tally(mc2, -1, 0);
add_to_set(mc1, -1, 0);
return;
}
add_to_tally(mc2, -1, 0);
add_to_set(mc1, -1, 0);
}
for(mycell* mc: mycells)
add_to_set(mc, 1, 0);
for(mycell* mc: mycells)
add_to_tally(mc, 1, 0);
for(int u=0; u<MAXDIST; u++) if(ctable[u] || tally[u]) {
printf("%d: %d/%d\n", u, ctable[u], (int) tally[u]);
if(ctable[u] != tally[u]) errorcount++;
}
for(mycell* mc: mycells)
add_to_tally(mc, -1, 0);
for(mycell* mc: mycells)
add_to_set(mc, -1, 0);
if(errorcount)
printf("errors found: %d\n", errorcount);
}
}