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