mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-16 02:04:48 +00:00
92 lines
2.4 KiB
C++
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", mc1, 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);
|
||
|
}
|
||
|
|
||
|
}
|