diff --git a/devmods/rulegen-tests.cpp b/devmods/rulegen-tests.cpp new file mode 100644 index 00000000..970a6cdf --- /dev/null +++ b/devmods/rulegen-tests.cpp @@ -0,0 +1,508 @@ +/* some extra routines for debugging and testing the rulegen algorithm */ + +#include "../hyper.h" +#include + +namespace hr { +namespace rulegen { + +string testroot = "devmods/rulegen-tests/"; +string testdir = testroot; + +struct hrmap_testproto : hrmap { + map counterpart; + map counterpart2; + + heptagon* clone(tcell *o) { + auto& h = counterpart2[o]; + if(!h) { + h = tailored_alloc (o->type); + counterpart[h] = o; + h->zebraval = 0; + h->emeraldval = 0; + h->distance = 0; + h->cdata = nullptr; + h->c7 = newCell(o->type, h); + } + return h; + } + + ~hrmap_testproto() { + println(hlog, "clearing ", isize(counterpart), " heptagons from testproto"); + for(auto p: counterpart) { + auto& at = p.first; + if(at->cdata) delete at->cdata; + destroy_cell(at->c7); + tailored_delete(at); + } + } + + heptagon *getOrigin() override { + return clone(t_origin); + } + + heptagon *create_step(heptagon *h, int d) override { + auto ch = counterpart[h]; + if(!ch->move(d)) { + h->c.connect(d, &oob, 0, false); + h->c7->c.connect(d, &out_of_bounds, 0, false); + out_of_bounds.master = &oob; + oob.c7 = &out_of_bounds; + return &oob; + } + auto ch1 = ch->cmove(d); + auto d1 = ch->c.spin(d); + auto h1 = clone(ch1); + if(ch == ch1) + throw rulegen_failure("connected to self??"); + if(h == h1) + throw rulegen_failure("connected to self on hept level??"); + h->c.connect(d, h1, d1, false); + return h1; + } + + void find_cell_connection(cell *c, int d) { + heptagon *h2 = createStep(c->master, d); + if(h2 == &oob) return; + c->c.connect(d, h2->c7,c->master->c.spin(d), c->master->c.mirror(d)); + } + + transmatrix adj(heptagon *h, int dir) override { + return arb::get_adj(arb::current_or_slided(), shvid(h->c7), dir, h->c.move(dir) ? h->c.spin(dir) : -1); + } + + int shvid(cell *c) override { + if(!counterpart.count(c->master)) { + /* may happen while handling floorshapes */ + return arb::id_of(c->master); + } + auto cc = counterpart[c->master]; + return cc->id; + } + + bool strict_tree_rules() { return true; } + }; + +reaction_t clear_debug = [] {}; + +map sprawl_shown; + +void view_debug() { + auto m = dynamic_cast (currentmap); + if(m) { + int ah = addHook(hooks_drawcell, 50, [m] (cell *c, const shiftmatrix& V) { + tcell *tc = m->counterpart[c->master]; + + string s; + auto label = (tc->code == MYSTERY ? "?" : its(tc->code)) + "/" + (tc->dist == MYSTERY ? "?" : its(tc->dist)); + + color_t col = 0xFFFFFF + 0x512960 * tc->code; + + if(pointer_indices.count(tc)) label += " " + index_pointer(tc); + + queuestr(V, 0.4, label, col, 1); + if(tc->parent_dir >= 0 && tc->parent_dir < tc->type) { + vid.linewidth *= 8; + queueline(V * C0, V * currentmap->adj(c, tc->parent_dir) * C0, 0xFFFFFFFF); + vid.linewidth /= 8; + } + + if(sprawl_shown.count(tc)) + queuepoly(V, cgi.shDisk, 0xFF0000FF); + + return false; + }); + + vector dh; + + dh.push_back(addHook(hooks_o_key, 15, [m] (o_funcs& v) { + v.push_back(named_functionality("sprawl", [m] { + tcell *c = m->counterpart[centerover->master]; + auto [d, id] = get_code(c); + twalker cw(c, d); + auto res = spread(get_analyzer(cw), cw); + println(hlog, "sprawl result = ", res); + sprawl_shown.clear(); + for(int i=0; iclone(dw.at)->c7, dw.spin, dw.mirrored); + centerover = cwt.at; + View = Id; + })); + })); + clear_debug = [ah, dh] { + delHook(hooks_drawcell, ah); + for(auto dhk: dh) delHook(hooks_o_key, dhk); + clear_debug = [] {}; + }; + } + + else if(currentmap->strict_tree_rules()) { + int ah = addHook(hooks_drawcell, 50, [] (cell *c, const shiftmatrix& V) { + string s; + int id = get_state(c); + auto label = its(id); + + color_t col = 0xFFFFFF + 0x512960 * id; + if(pointer_indices.count(c->master)) label += " " + index_pointer(c->master); + + queuestr(V, 0.3, label, col, 1); + + vid.linewidth *= 8; + queueline(V * C0, V * currentmap->adj(c, 0) * C0, 0xFFFFFFFF, 4); + vid.linewidth /= 8; + return false; + }); + clear_debug = [ah] { delHook(hooks_drawcell, ah); }; + } + } + +int test_rotate_val = 0; + +int test_count = 10000; + +void test_rules() { + cell *c = currentmap->gamestart(); + + int N = isize(treestates); + if(!N) { + println(hlog, "no states generated"); + return; + } + + vector howmany(N); + howmany[0] = 1; + + celllister cl(c, 100, test_count, nullptr); + vector bydist(64, 0); + for(cell *cc: cl.lst) { + int d = cl.getdist(cc); + if(d < 64) bydist[d]++; + } + + vector vals; + + vector seq; + + for(int iter=0; iter<30; iter++) { + bignum total; + for(auto& h: howmany) total += h; + seq.push_back(total.get_str(100)); + println(hlog, iter, " : ", total.get_str(100), " vs ", bydist[iter]); + if(bydist[iter] && bydist[iter] != total.approx_ll()) + println(hlog, "ERROR count mismatch"); + vector next(N); + for(int id=0; id= 0) + next[s] += howmany[id]; + howmany = std::move(next); + } + + println(hlog, "sequence: ", seq); + } + +void list_sequence() { + + int N = isize(treestates); + if(!N) { + println(hlog, "no states generated"); + return; + } + + vector howmany(N); + howmany[0] = 1; + + vector seq; + + for(int iter=0; iter<30; iter++) { + bignum total; + for(auto& h: howmany) total += h; + seq.push_back(total.get_str(100)); + vector next(N); + for(int id=0; id= 0) + next[s] += howmany[id]; + howmany = std::move(next); + } + + println(hlog, "sequence: ", seq); + } + +void print_rules(); + +string rule_name(int r) { + if(r == DIR_UNKNOWN) return "??"; + else if(r == DIR_MULTI_GO_LEFT) return "ML"; + else if(r == DIR_MULTI_GO_RIGHT) return "MR"; + else if(r == DIR_LEFT) return "L"; + else if(r == DIR_RIGHT) return "R"; + else if(r == DIR_PARENT) return "P"; + else return its(r); + } + +void print_rules() { + for(int i=0; iis_solid) qsolid++; + if(c->code != MYSTERY) qcode++; + if(c->dist != MYSTERY) qdist++; + c = c->next; + } + + println(hlog, "after rulegen: tcellcount = ", tcellcount, "-", tunified, " qsolid = ", qsolid, " qdist = ", qdist, " qcode = ", qcode, " radius = ", prepare_around_radius, " try_count = ", try_count, " ticks = ", tstart); + + println(hlog, "CSV;", euclid ? "E" : hyperbolic ? "H" : "?", ";", status, ";", tcellcount, ";", tunified, ";", qsolid, ";", qdist, ";", qcode, ";", prepare_around_radius, ";", try_count, ";", tstart, ";", isize(treestates), ";", arb::current.filename); + fflush(stdout); + + print_rules(); + /* for(auto& a: analyzers) + println(hlog, "analyzer ", a.first, " size is ", isize(a.second.spread)); */ + fflush(stdout); + list_sequence(); + + + fflush(stdout); + } + +void out_reg() { + println(hlog, "X ", int(geometry), " ", int(variation), " ", int(gp::param.first), " ", int(gp::param.second)); + } + +void test_all_regular(vector glist) { + for(eGeometry g: glist) { + + set_geometry(g); + set_variation(eVariation::pure); + out_reg(); + + set_geometry(g); + set_variation(eVariation::bitruncated); + out_reg(); + + for(int a=1; a<5; a++) + for(int b=0; b<=a; b++) { + if(a==1 && b == 0) continue; + if(a==1 && b == 1 && S3 == 3) continue; + stop_game(); + set_geometry(g); + gp::param = {a, b}; + set_variation(eVariation::goldberg); + out_reg(); + + if(S3 == 4 && (geometry == g46 || ((a+b)%2 == 0))) { + stop_game(); + set_variation(eVariation::unrectified); + out_reg(); + } + + if(S3 == 3 && (geometry == gOctagon || (a-b)%3 == 0)) { + stop_game(); + set_variation(eVariation::untruncated); + out_reg(); + + stop_game(); + set_variation(eVariation::warped); + out_reg(); + } + } + } + } + +void set_dir(string s) { + testdir = testroot + s; + system(("mkdir -p " + testdir).c_str()); + } + +void test_from_file(string list) { + + set_dir("devmods/rulegen-tests/" + list); + + vector filenames; + std::ifstream is("devmods/rulegen-tests/" + list + ".lst"); + string s; + while(getline(is, s)) { + if(s != "") filenames.push_back(s); + } + int trv = test_rotate_val; + + int id = 0; + + for(const string& s: filenames) { + if(trv) { trv--; id++; continue; } + stop_game(); + set_geometry(gArbitrary); + try { + println(hlog, "loading ", s, "... ", id++, "/", isize(filenames)); + arb::load(s); + } + catch(hr_parse_exception& ex) { + println(hlog, "failed: ", ex.s); + continue; + } + catch(arb::hr_polygon_error& ex) { + println(hlog, "poly error"); + continue; + } + catch(hr_exception& ex) { + println(hlog, "other exception"); + continue; + } + if(cgflags & qAFFINE) { + println(hlog, "illgeal tessellation found: affine"); continue; + } + if(sphere) { + println(hlog, "illgeal tessellation found: spherical"); continue; + } + test_current(); + } + } + +void test_all_geoms(int i) { + if(i&1) { + set_dir("regular/"); + test_all_regular({gNormal, gOctagon, g45, g46, g47, gEuclid, gEuclidSquare}); + } + } + +int testargs() { + using namespace arg; + + if(0) ; + + else if(argis("-testproto")) { + restart_game_on(new hrmap_testproto); + println(hlog, "creatad a testproto map with ", tcellcount, " cells"); + } + else if(argis("-test-this")) { + PHASEFROM(3); + try { + test_current(); + } + catch(rulegen_failure& e) { + } + } + else if(argis("-test-list")) { + PHASEFROM(3); + shift(); + test_from_file(args()); + } + else if(argis("-test-all")) { + PHASEFROM(3); + shift(); + test_all_geoms(argi()); + start_game(); + } + else if(argis("-trv")) { + shift(); test_rotate_val = argi(); + } + else if(argis("-view-debug")) + view_debug(); + else if(argis("-clear-debug")) + clear_debug(); + + else return 1; + return 0; + } + +auto testhooks = + addHook(hooks_args, 100, testargs); + +} } diff --git a/devmods/rulegen-tests/tricky.lst b/devmods/rulegen-tests/tricky.lst new file mode 100644 index 00000000..5f603918 --- /dev/null +++ b/devmods/rulegen-tests/tricky.lst @@ -0,0 +1,241 @@ +tessellations/multitile/4-7/1+3a/1a2+3af/4-7-1a2+3af-30.tes +tessellations/other/toimine/toimine884/112/toimine884-112-076.tes +tessellations/other/toimine/toimine884/211/051-100/toimine884-211-072.tes +tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu\ 666\ 666\ 3366\ 333333\ AFAS6.tes +tessellations/multitile/6-3/1+3a/6-3-1r2+3af-3.tes +tessellations/other/heavpoot-a/hp-3a+6s3b+6a1.tes +tessellations/multitile/3-6/1+3/3-6-1a+3a-3.tes +tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu 4444 33344 33344 33434 A1AFF.tes +tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu 33344 33434 333333 333333 FAS6S3b.tes +tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu 3cc 334c 33434 333333.tes +tessellations/pseudo-Archimedean/Euclidean/4-uniform/eu 46c 3366 3446 33344.tes +tessellations/multitile/4-6/2+2/2a1+2f/001-100/4-6-2a1+2f-083.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-58.tes +tessellations/other/toimine/toimine6612/121/101-150/toimine6612-121-116.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-18.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-34.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-04.tes +tessellations/multitile/3-7/1+2+3/3-7-1f+2r+3f-19.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-51.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-545.tes +tessellations/other/toimine/toimine6620/211/toimine6620-211-54.tes +tessellations/other/toimine/toimine886/111/toimine886-111-08.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-503.tes +tessellations/other/toimine/toimine6610/121/toimine6610-121-20.tes +tessellations/other/toimine/toimine6612/211/101-150/toimine6612-211-126.tes +tessellations/polyschwartz/245/2-2 + 6-39.tes +tessellations/other/toimine/toimine6615/121/toimine6615-121-02.tes +tessellations/other/toimine/toimine6612/211/101-150/toimine6612-211-131.tes +tessellations/multitile/polyforms/schwarz/245/1-1 + 4-8 s1.tes +tessellations/other/toimine/toimine6617/113/toimine6617-113-16.tes +tessellations/multitile/polyforms/schwarz/245/2-2 + 6-39.tes +tessellations/other/toimine/toimine6618/211/151-159/toimine6618-211-151.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-16.tes +tessellations/polyschwartz/237/1-1 + 7-08.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-59.tes +tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-146.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-568.tes +tessellations/other/toimine/toimine6618/111/toimine6618-111-17.tes +tessellations/other/toimine/toimine6612/211/201-243/toimine6612-211-243.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-52.tes +tessellations/other/toimine/toimine885/211/toimine885-211-23.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-64.tes +tessellations/other/toimine/toimine885/211/toimine885-211-44.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-58.tes +tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-188.tes +tessellations/multitile/polyforms/schwarz/245/45 + 410/12/45 + 410 + 410 s02.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-49.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-564.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-42.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-03.tes +tessellations/other/toimine/toimine6610/211/toimine6610-211-13.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-36.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-22.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-57.tes +tessellations/other/toimine/toimine6618/112/toimine6618-112-002.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-60.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-06.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-53.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-02.tes +tessellations/multitile/3-8/1+2+3/1f+2a1+3f/3-8-1f+2a1+3f-44.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-57.tes +tessellations/other/toimine/toimine885/112/toimine885-112-10.tes +tessellations/other/toimine/toimine6618/211/151-159/toimine6618-211-159.tes +tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-117.tes +tessellations/other/toimine/toimine6611/112/toimine6611-112-09.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-33.tes +tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-070.tes +tessellations/other/toimine/toimine6610/112/toimine6610-112-28.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-25.tes +tessellations/other/toimine/toimine6610/211/toimine6610-211-27.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/401-500/3-8-1f+2f+3f-425.tes +tessellations/other/toimine/toimine6617/113/toimine6617-113-13.tes +tessellations/other/toimine/toimine6612/112/051-100/toimine6612-112-082.tes +tessellations/other/toimine/toimine6620/111/toimine6620-111-09.tes +tessellations/other/toimine/toimine668/121/toimine668-121-12.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-40.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/401-500/3-8-1f+2f+3f-496.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/101-200/3-8-1f+2f+3f-101.tes +tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-164.tes +tessellations/other/toimine/toimine6612/211/051-100/toimine6612-211-080.tes +tessellations/other/toimine/toimine6611/121/toimine6611-121-11.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-11.tes +tessellations/other/toimine/toimine6612/211/051-100/toimine6612-211-078.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-24.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-62.tes +tessellations/other/toimine/toimine6612/121/001-050/toimine6612-121-012.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/401-500/3-8-1f+2f+3f-424.tes +tessellations/other/toimine/toimine6617/113/toimine6617-113-12.tes +tessellations/other/toimine/toimine6615/121/toimine6615-121-19.tes +tessellations/other/toimine/toimine6612/121/201-227/toimine6612-121-226.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-12.tes +tessellations/other/toimine/toimine6620/211/toimine6620-211-19.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-563.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-03.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-31.tes +tessellations/other/toimine/toimine6615/211/toimine6615-211-53.tes +tessellations/other/toimine/toimine2311/4+2/toimine2311-4+2-07.tes +tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-150.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-04.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-64.tes +tessellations/multitile/polyforms/schwarz/245/1-1 + 4-8 s2.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-54.tes +tessellations/multitile/polyforms/schwarz/237/1-1 + 7-08.tes +tessellations/other/toimine/toimine6620/121/toimine6620-121-29.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-09.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-45.tes +tessellations/other/toimine/toimine6612/211/101-150/toimine6612-211-122.tes +tessellations/other/toimine/toimine6612/121/151-200/toimine6612-121-172.tes +tessellations/other/toimine/toimine6612/121/201-227/toimine6612-121-211.tes +tessellations/other/toimine/toimine6615/211/toimine6615-211-61.tes +tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-155.tes +tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-088.tes +tessellations/other/toimine/toimine6612/211/051-100/toimine6612-211-086.tes +tessellations/other/toimine/toimine6618/111/toimine6618-111-14.tes +tessellations/polyschwartz/245/1-1 + 4-8 s2.tes +tessellations/other/toimine/toimine6612/112/101-150/toimine6612-112-142.tes +tessellations/other/toimine/toimine6612/211/001-050/toimine6612-211-045.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-36.tes +tessellations/multitile/4-6/2+2/2a1+2f/001-100/4-6-2a1+2f-033.tes +tessellations/other/toimine/toimine6612/121/151-200/toimine6612-121-177.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-20.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/401-500/3-8-1f+2f+3f-445.tes +tessellations/other/toimine/toimine6618/121/051-100/toimine6618-121-066.tes +tessellations/other/toimine/toimine6612/111/toimine6612-111-30.tes +tessellations/multitile/4-6/2+2/2f+2f/401-500/4-6-2f+2f-466.tes +tessellations/other/toimine/toimine6617/113/toimine6617-113-14.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-12.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-09.tes +tessellations/other/toimine/toimine6610/211/toimine6610-211-17.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-69.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-17.tes +tessellations/other/toimine/toimine6611/121/toimine6611-121-04.tes +tessellations/other/toimine/toimine6610/211/toimine6610-211-23.tes +tessellations/other/toimine/toimine668/211/toimine668-211-08.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-40.tes +tessellations/other/toimine/toimine6612/211/201-243/toimine6612-211-233.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-35.tes +tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-058.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/301-400/3-8-1f+2f+3f-396.tes +tessellations/other/toimine/toimine6612/112/101-150/toimine6612-112-124.tes +tessellations/other/toimine/toimine668/112/toimine668-112-04.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-53.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-50.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-47.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-05.tes +tessellations/other/toimine/toimine668/112/toimine668-112-02.tes +tessellations/other/toimine/toimine6612/112/101-150/toimine6612-112-136.tes +tessellations/polyschwartz/245/1-1 + 5-01.tes +tessellations/other/toimine/toimine6612/112/201-250/toimine6612-112-219.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-18.tes +tessellations/multitile/polyforms/schwarz/245/1-1 + 5-01.tes +tessellations/other/toimine/toimine6618/121/101-126/toimine6618-121-114.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-51.tes +tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-060.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-21.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-37.tes +tessellations/other/toimine/toimine6612/211/201-243/toimine6612-211-232.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-08.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-15.tes +tessellations/other/toimine/toimine6620/211/toimine6620-211-36.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-45.tes +tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-129.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-70.tes +tessellations/other/toimine/toimine6610/121/toimine6610-121-16.tes +tessellations/polyschwartz/245/45 + 410/12/45 + 410 + 410 s02.tes +tessellations/multitile/polyforms/schwarz/245/1-1 + 4-8 s3.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-76.tes +tessellations/other/toimine/toimine6620/112/toimine6620-112-47.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-14.tes +tessellations/multitile/3-7/1+1+3/3-7-1f+1f+3f-20.tes +tessellations/other/toimine/toimine6618/211/051-100/toimine6618-211-065.tes +tessellations/other/toimine/toimine6610/112/toimine6610-112-06.tes +tessellations/other/toimine/toimine885/121/toimine885-121-34.tes +tessellations/other/toimine/toimine6615/211/toimine6615-211-04.tes +tessellations/other/toimine/toimine6618/121/051-100/toimine6618-121-086.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/101-200/3-8-1f+2f+3f-169.tes +tessellations/other/toimine/toimine885/211/toimine885-211-37.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-55.tes +tessellations/other/toimine/toimine2311/4+2/toimine2311-4+2-60.tes +tessellations/multitile/4-6/2+2/2f+2f/401-500/4-6-2f+2f-447.tes +tessellations/other/toimine/toimine6612/211/051-100/toimine6612-211-059.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-61.tes +tessellations/other/toimine/toimine6620/111/toimine6620-111-07.tes +tessellations/other/toimine/toimine6618/121/051-100/toimine6618-121-056.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-48.tes +tessellations/other/toimine/toimine6612/211/101-150/toimine6612-211-125.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-47.tes +tessellations/polyschwartz/245/1-1 + 4-8 s3.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-13.tes +tessellations/other/toimine/toimine885/121/toimine885-121-25.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-59.tes +tessellations/other/toimine/toimine6615/211/toimine6615-211-44.tes +tessellations/other/toimine/toimine6612/111/toimine6612-111-26.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-26.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-596.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-49.tes +tessellations/other/toimine/toimine2311/4+2/toimine2311-4+2-42.tes +tessellations/other/toimine/toimine6618/211/151-159/toimine6618-211-156.tes +tessellations/other/toimine/toimine6618/121/051-100/toimine6618-121-096.tes +tessellations/other/toimine/toimine6618/121/101-126/toimine6618-121-125.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-11.tes +tessellations/other/toimine/toimine2311/3+3/toimine2311-3+3-46.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-34.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-54.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-56.tes +tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-128.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/001-100/3-8-1f+2f+3f-091.tes +tessellations/other/toimine/toimine668/211/toimine668-211-17.tes +tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-153.tes +tessellations/other/toimine/toimine6612/112/201-250/toimine6612-112-215.tes +tessellations/other/toimine/toimine668/112/toimine668-112-28.tes +tessellations/other/toimine/toimine668/112/toimine668-112-01.tes +tessellations/other/toimine/toimine6620/121/toimine6620-121-37.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-63.tes +tessellations/other/toimine/toimine6610/211/toimine6610-211-19.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-29.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-43.tes +tessellations/other/toimine/toimine6618/121/101-126/toimine6618-121-126.tes +tessellations/other/toimine/toimine668/211/toimine668-211-19.tes +tessellations/other/toimine/toimine6612/112/101-150/toimine6612-112-140.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-30.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-32.tes +tessellations/multitile/3-11/1+1+1/3-11-1a+1a+1f-2.tes +tessellations/polyschwartz/245/1-1 + 4-8 s1.tes +tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-110.tes +tessellations/other/toimine/toimine6612/112/151-200/toimine6612-112-176.tes +tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-149.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-50.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-62.tes +tessellations/other/toimine/toimine886/211/toimine886-211-011.tes +tessellations/other/toimine/toimine6615/111/toimine6615-111-28.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-44.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-10.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-38.tes +tessellations/other/toimine/toimine2311/2+4/toimine2311-2+4-46.tes +tessellations/other/toimine/toimine6618/211/101-150/toimine6618-211-125.tes +tessellations/other/toimine/toimine6620/211/toimine6620-211-18.tes +tessellations/other/toimine/toimine668/211/toimine668-211-21.tes +tessellations/other/toimine/toimine6610/121/toimine6610-121-04.tes +tessellations/other/toimine/toimine6611/112/toimine6611-112-02.tes +tessellations/multitile/3-8/1+2+3/1f+2f+3f/501-596/3-8-1f+2f+3f-565.tes