diff options
Diffstat (limited to 'test/121_coorddata_dr')
| -rw-r--r-- | test/121_coorddata_dr/00_all.in | 0 | ||||
| -rw-r--r-- | test/121_coorddata_dr/00_all.out | 1 | ||||
| -rw-r--r-- | test/121_coorddata_dr/coorddata_dr.c | 59 |
3 files changed, 60 insertions, 0 deletions
diff --git a/test/121_coorddata_dr/00_all.in b/test/121_coorddata_dr/00_all.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/121_coorddata_dr/00_all.in | |||
diff --git a/test/121_coorddata_dr/00_all.out b/test/121_coorddata_dr/00_all.out new file mode 100644 index 0000000..d6109db --- /dev/null +++ b/test/121_coorddata_dr/00_all.out | |||
| @@ -0,0 +1 @@ | |||
| All good | |||
diff --git a/test/121_coorddata_dr/coorddata_dr.c b/test/121_coorddata_dr/coorddata_dr.c new file mode 100644 index 0000000..92e7c2a --- /dev/null +++ b/test/121_coorddata_dr/coorddata_dr.c | |||
| @@ -0,0 +1,59 @@ | |||
| 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 | } | ||
