equal/hKis/test/testsort.c
2022-10-25 18:36:19 +08:00

91 lines
2.0 KiB
C

#include "test.h"
#include "../src/allocate.h"
#include "../src/sort.h"
static bool
less_unsigned (unsigned a, unsigned b)
{
return a < b;
}
static void
test_sort_unsigneds (void)
{
DECLARE_AND_INIT_SOLVER (solver);
#define N 20
unsigned found[N];
memset (found, 0, sizeof found);
unsigneds stack;
INIT_STACK (stack);
SORT_STACK (unsigned, stack, less_unsigned);
srand (42);
for (unsigned i = 0; i < N; i++)
{
unsigned tmp = rand () % N / 2;
PUSH_STACK (stack, tmp);
found[tmp]++;
}
SORT_STACK (unsigned, stack, less_unsigned);
for (all_stack (unsigned, i, stack))
printf ("%u\n", i);
for (all_stack (unsigned, i, stack))
{
assert (found[i]);
found[i]--;
}
for (unsigned i = 0; i < N; i++)
assert (!found[i]);
for (unsigned i = 1; i < N; i++)
assert (PEEK_STACK (stack, i - 1) <= PEEK_STACK (stack, i));
RELEASE_STACK (stack);
RELEASE_STACK (SORTER);
#ifndef QUIET
RELEASE_STACK (solver->profiles.stack);
#endif
#ifndef NMETRICS
assert (!solver->statistics.allocated_current);
#endif
#undef N
}
static bool
less_str (const char *a, const char *b)
{
return strcmp (a, b) < 0;
}
static void
test_sort_strings (void)
{
struct kissat dummy, *solver = &dummy;
memset (&dummy, 0, sizeof dummy);
STACK (const char *) stack;
INIT_STACK (stack);
SORT_STACK (const char *, stack, less_str);
PUSH_STACK (stack, "zzzzz");
SORT_STACK (const char *, stack, less_str);
PUSH_STACK (stack, "ccccc");
PUSH_STACK (stack, "bbbbb");
PUSH_STACK (stack, "xxxxx");
PUSH_STACK (stack, "aaaaa");
SORT_STACK (const char *, stack, less_str);
for (all_pointers (const char, s, stack))
printf ("%s\n", s);
RELEASE_STACK (stack);
RELEASE_STACK (SORTER);
#ifndef QUIET
RELEASE_STACK (solver->profiles.stack);
#endif
#ifndef NMETRICS
assert (!solver->statistics.allocated_current);
#endif
}
void
tissat_schedule_sort (void)
{
SCHEDULE_FUNCTION (test_sort_unsigneds);
SCHEDULE_FUNCTION (test_sort_strings);
}