aboutsummaryrefslogtreecommitdiff
path: root/src/nissy.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/nissy.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/nissy.c b/src/nissy.c
index 318cff1..27e2835 100644
--- a/src/nissy.c
+++ b/src/nissy.c
@@ -13,6 +13,9 @@
13 13
14int parse_h48_options(const char *, uint8_t *, uint8_t *, uint8_t *); 14int parse_h48_options(const char *, uint8_t *, uint8_t *, uint8_t *);
15STATIC int64_t write_result(cube_t, char [static 22]); 15STATIC int64_t write_result(cube_t, char [static 22]);
16STATIC bool distribution_equal(
17 const uint64_t [static 21], const uint64_t [static 21], uint8_t);
18STATIC bool checkdata(const void *, const tableinfo_t *);
16 19
17/* TODO: add option to get DR, maybe C-only, E-only, eo... */ 20/* TODO: add option to get DR, maybe C-only, E-only, eo... */
18#define GETCUBE_OPTIONS(S, F) { .option = S, .fix = F } 21#define GETCUBE_OPTIONS(S, F) { .option = S, .fix = F }
@@ -62,6 +65,49 @@ parse_h48_options_error:
62 return -1; 65 return -1;
63} 66}
64 67
68STATIC bool
69checkdata(const void *buf, const tableinfo_t *info)
70{
71 uint64_t distr[21];
72
73 if (!strncmp(info->solver, "cocsep", 6)) {
74 getdistribution_cocsep(
75 (uint32_t *)((char *)buf + INFOSIZE), distr);
76 } else if (!strncmp(info->solver, "h48", 3)) {
77 getdistribution_h48((uint8_t *)buf + INFOSIZE, distr,
78 info->h48h, info->bits);
79 } else {
80 LOG("checkdata: unknown solver %s\n", info->solver);
81 return false;
82 }
83
84 return distribution_equal(info->distribution, distr, info->maxvalue);
85}
86
87STATIC bool
88distribution_equal(
89 const uint64_t expected[static 21],
90 const uint64_t actual[static 21],
91 uint8_t maxvalue
92)
93{
94 int wrong;
95 uint8_t i;
96
97 for (i = 0, wrong = 0; i <= MAX(maxvalue, 20); i++) {
98 if (expected[i] != actual[i]) {
99 wrong++;
100 LOG("Value %" PRIu8 ": expected %" PRIu64 ", found %"
101 PRIu64 "\n", i, expected[i], actual[i]);
102 }
103 }
104
105 if (wrong > 0)
106 LOG("chekdata: %d wrong values\n", wrong);
107
108 return wrong > 0;
109}
110
65STATIC int64_t 111STATIC int64_t
66write_result(cube_t cube, char result[static 22]) 112write_result(cube_t cube, char result[static 22])
67{ 113{
@@ -275,6 +321,23 @@ nissy_gendata(
275} 321}
276 322
277int64_t 323int64_t
324nissy_checkdata(
325 const char *solver,
326 const char *options,
327 const void *data
328)
329{
330 char *buf;
331 tableinfo_t info;
332
333 for (buf = (char *)data; readtableinfo(buf, &info); buf += info.next)
334 if (!checkdata(buf, &info))
335 return 1;
336
337 return 0;
338}
339
340int64_t
278nissy_solve( 341nissy_solve(
279 const char cube[static 22], 342 const char cube[static 22],
280 const char *solver, 343 const char *solver,

Generated with cgit - Back to sebastiano.tronto.net