commit d3db14d63a03c4a313e818ba1435433dd18acba4
parent 3b313daec1614d8a3288b8e20a06dc912a59bda8
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date: Sat, 13 Jul 2024 08:19:44 +0200
Improved h48set tests
Diffstat:
2 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/src/solve_h48.h b/src/solve_h48.h
@@ -79,6 +79,7 @@ _static void h48set_destroy(h48set_t *);
_static_inline int64_t h48set_lookup(h48set_t *, int64_t);
_static_inline void h48set_insert(h48set_t *, int64_t);
_static_inline bool h48set_contains(h48set_t *, int64_t);
+_static inline int64_t h48set_save(h48set_t *, int64_t *);
_static_inline int64_t coord_h48(cube_t, const uint32_t *, uint8_t);
_static_inline int64_t coord_h48_edges(cube_t, int64_t, uint8_t, uint8_t);
@@ -167,6 +168,18 @@ h48set_contains(h48set_t *set, int64_t x)
return i == -1;
}
+_static int64_t
+h48set_save(h48set_t *set, int64_t *a)
+{
+ int64_t i, j;
+
+ for (i = 0, j = 0; i < set->capacity; i++)
+ if (set->table[i] != -1)
+ a[j++] = set->table[i];
+
+ return j;
+}
+
_static_inline int64_t
coord_h48(cube_t c, const uint32_t *cocsepdata, uint8_t h)
{
diff --git a/test/104_h48set/h48set_tests.c b/test/104_h48set/h48set_tests.c
@@ -15,6 +15,7 @@ void h48set_destroy(h48set_t *);
int64_t h48set_lookup(h48set_t *, int64_t);
void h48set_insert(h48set_t *, int64_t);
bool h48set_contains(h48set_t *, int64_t);
+int64_t h48set_save(h48set_t *, int64_t *);
int compare(const void *x, const void *y) {
int64_t a = *(int64_t *)x;
@@ -31,39 +32,33 @@ int64_t readl(void) {
}
void run(void) {
- bool f;
h48set_t set;
- int64_t n, i, j, capacity, mod, *a, u;
+ int64_t n, i, k, capacity, mod, *a, *b;
capacity = readl();
mod = readl();
n = readl();
a = malloc(n * sizeof(int64_t));
+ b = malloc(n * sizeof(int64_t));
for (i = 0; i < n; i++)
a[i] = readl();
- /* Count unique elements */
- u = 0;
- for (i = 0; i < n; i++) {
- for (j = 0, f = true; j < i; j++)
- f = f && a[i] != a[j];
- u += f;
- }
-
h48set_create(&set, capacity, mod);
for (i = 0; i < n; i++)
h48set_insert(&set, a[i]);
- for (i = 0, j = 0; i < set.capacity; i++)
- if (set.table[i] != -1)
- a[j++] = set.table[i];
- qsort(a, j, sizeof(int64_t), compare);
+ k = h48set_save(&set, b);
+ qsort(b, k, sizeof(int64_t), compare);
- printf("%" PRId64 "\n", set.n);
- for (i = 0; i < j; i++)
- printf("%" PRId64 "\n", a[i]);
+ printf("%" PRId64 "\n", k);
+ for (i = 0; i < k; i++)
+ printf("%" PRId64 "\n", b[i]);
+ for (i = 0; i < n; i++)
+ if (!h48set_contains(&set, a[i]))
+ printf("Set does not contain %" PRId64 "\n", a[i]);
h48set_destroy(&set);
free(a);
+ free(b);
}