nissy-core

The "engine" of nissy, including the H48 optimal solver.
git clone https://git.tronto.net/nissy-core
Download | Log | Files | Refs | README | LICENSE

cocsep_selfsim_tests.c (1164B)


      1 /*
      2  * This test is tricky, we only have two cases for now: the solved cube
      3  * and the cube that is one quarter-turn-move off (all such cases are
      4  * equivalent due to symmetry). Adding more tests requires figuring out
      5  * by hand which one is the first position in its class to be reached.
      6  * Note that the .out files need a space before each newline.
      7  */
      8 #include "../test.h"
      9 
     10 size_t gendata_cocsep(unsigned char *, uint64_t *, cube_t *);
     11 int64_t coord_cocsep(cube_t);
     12 
     13 void run(void) {
     14 	char str[STRLENMAX];
     15 	unsigned char buf[2000000];
     16 	uint32_t *cocsepdata, data;
     17 	int64_t coord, coclass;
     18 	uint64_t selfsim[COCSEP_CLASSES], sim, t;
     19 	oriented_cube_t cube;
     20 	cube_t rep[COCSEP_CLASSES];
     21 
     22 	gendata_cocsep(buf, selfsim, rep);
     23 	cocsepdata = (uint32_t *)(buf + INFOSIZE);
     24 
     25 	/* All cases in the same test so we do not generate data many times */
     26 
     27 	while (fgets(str, STRLENMAX, stdin) != NULL) {
     28 		cube = readcube(str);
     29 		coord = coord_cocsep(cube.cube);
     30 		data = cocsepdata[coord];
     31 		coclass = (data & (0xFFFU << 16)) >> 16;
     32 		sim = selfsim[coclass];
     33 		for (t = 0; t < 48 && sim; t++, sim >>= 1) {
     34 			if (sim & 1)
     35 				printf("%" PRId64 " ", t);
     36 		}
     37 		printf("\n");
     38 	}
     39 }