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 }