coorddata_dreo.c (1255B)
1 #include "../test.h" 2 3 #define POW_3_7 2187 4 #define BOUND 45 * POW_3_7 5 #define TGROUP UINT64_C(4278190335) 6 7 cube_t transform(cube_t, uint8_t); 8 uint64_t coordinate_dreo_coord(cube_t, const unsigned char *); 9 cube_t coordinate_dreo_cube(uint64_t, const unsigned char *); 10 uint64_t coordinate_dreo_gendata(unsigned char *); 11 12 void run(void) { 13 bool found; 14 uint64_t t; 15 char str[STRLENMAX]; 16 unsigned char *data; 17 size_t size; 18 cube_t cube; 19 uint64_t coord, coord2; 20 21 size = coordinate_dreo_gendata(NULL); 22 data = malloc(size); 23 coordinate_dreo_gendata(data); 24 25 for (coord = 0; coord < BOUND; coord++) { 26 cube = coordinate_dreo_cube(coord, data); 27 28 if (!isconsistent(cube)) { 29 printf("Error: invcoord of %" PRId64 30 " is not consistent\n", coord); 31 goto cleanup; 32 } 33 34 for (t = 0, found = false; t < 48; t++) { 35 if (!((UINT64_C(1) << t) & TGROUP)) 36 continue; 37 38 coord2 = coordinate_dreo_coord(transform(cube, t), data); 39 if (coord == coord2) { 40 found = true; 41 break; 42 } 43 } 44 45 if (!found) { 46 printf("Error: invcoord of %" PRId64 " returns %" 47 PRId64 " with cube:\n", coord, coord2); 48 writecube("H48", cube, STRLENMAX, str); 49 printf("%s\n", str); 50 goto cleanup; 51 } 52 } 53 54 printf("All good\n"); 55 56 cleanup: 57 free(data); 58 }