aboutsummaryrefslogtreecommitdiff
path: root/test/102_cocsep_selfsim/cocsep_selfsim_tests.c
blob: 0ead3b429847db4391c95434921978079ef1aa7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
 * This test is tricky, we only have two cases for now: the solved cube
 * and the cube that is one quarter-turn-move off (all such cases are
 * equivalent due to symmetry). Adding more tests requires figuring out
 * by hand which one is the first position in its class to be reached.
 * Note that the .out files need a space before each newline.
 */
#include "../test.h"

size_t gendata_cocsep(unsigned char *, uint64_t *, cube_t *);
int64_t coord_cocsep(cube_t);

void run(void) {
	char str[STRLENMAX];
	unsigned char buf[2000000];
	uint32_t *cocsepdata, data;
	int64_t coord, coclass;
	uint64_t selfsim[COCSEP_CLASSES], sim, t;
	cube_t cube, rep[COCSEP_CLASSES];

	gendata_cocsep(buf, selfsim, rep);
	cocsepdata = (uint32_t *)(buf + INFOSIZE);

	/* All cases in the same test so we do not generate data many times */

	while (fgets(str, STRLENMAX, stdin) != NULL) {
		cube = readcube("H48", str);
		coord = coord_cocsep(cube);
		data = cocsepdata[coord];
		coclass = (data & (0xFFFU << 16)) >> 16;
		sim = selfsim[coclass];
		for (t = 0; t < 48 && sim; t++, sim >>= 1) {
			if (sim & 1)
				printf("%" PRId64 " ", t);
		}
		printf("\n");
	}
}

Generated with cgit - Back to sebastiano.tronto.net