From 0f23987edbbabdf88fbe175f695b4fdb727586fd Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Fri, 28 Mar 2025 20:57:04 +0100 Subject: DR coordinate solver --- test/121_coorddata_dr/00_all.in | 0 test/121_coorddata_dr/00_all.out | 1 + test/121_coorddata_dr/coorddata_dr.c | 59 ++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 test/121_coorddata_dr/00_all.in create mode 100644 test/121_coorddata_dr/00_all.out create mode 100644 test/121_coorddata_dr/coorddata_dr.c (limited to 'test/121_coorddata_dr') 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 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 @@ +#include "../test.h" + +#define POW_3_7 2187 +#define BOUND (64430 * POW_3_7 / 100) +#define TGROUP UINT64_C(4278190335) + +cube_t transform(cube_t, uint8_t); +uint64_t coordinate_dr_coord(cube_t, const void *); +cube_t coordinate_dr_cube(uint64_t, const void *); +uint64_t coordinate_dr_gendata(void *); + +void run(void) { + bool found; + uint64_t t; + char str[STRLENMAX]; + void *data; + size_t size; + cube_t cube; + uint64_t coord, coord2; + + size = coordinate_dr_gendata(NULL); + data = malloc(size); + coordinate_dr_gendata(data); + + /* Test all possible values for CO coordinate */ + for (coord = 0; coord < BOUND; coord++) { + cube = coordinate_dr_cube(coord, data); + + if (!isconsistent(cube)) { + printf("Error: invcoord of %" PRId64 + " is not consistent\n", coord); + goto cleanup; + } + + for (t = 0, found = false; t < 48; t++) { + if (!((UINT64_C(1) << t) & TGROUP)) + continue; + + coord2 = coordinate_dr_coord(transform(cube, t), data); + if (coord == coord2) { + found = true; + break; + } + } + + if (!found) { + printf("Error: invcoord of %" PRId64 " returns %" + PRId64 " with cube:\n", coord, coord2); + writecube("H48", cube, STRLENMAX, str); + printf("%s\n", str); + goto cleanup; + } + } + + printf("All good\n"); + +cleanup: + free(data); +} -- cgit v1.3