84 lines
1.7 KiB
C
84 lines
1.7 KiB
C
#include "test.h"
|
|
|
|
#include "../src/allocate.h"
|
|
|
|
static void
|
|
test_stack_basic (void)
|
|
{
|
|
DECLARE_AND_INIT_SOLVER (solver);
|
|
STACK (unsigned) stack;
|
|
assert (sizeof stack == 3 * sizeof (void *));
|
|
INIT_STACK (stack);
|
|
assert (EMPTY_STACK (stack));
|
|
assert (FULL_STACK (stack));
|
|
const unsigned n = 100;
|
|
for (unsigned i = 0; i < n; i++)
|
|
{
|
|
assert (SIZE_STACK (stack) == i);
|
|
PUSH_STACK (stack, i);
|
|
}
|
|
#ifndef NMETRICS
|
|
assert (solver->statistics.allocated_current == 128 * sizeof (unsigned));
|
|
#endif
|
|
{
|
|
unsigned i = 0;
|
|
for (all_stack (unsigned, e, stack))
|
|
assert (e == i++);
|
|
assert (i == n);
|
|
}
|
|
{
|
|
unsigned i = n - 1;
|
|
while (!EMPTY_STACK (stack))
|
|
{
|
|
unsigned tmp = TOP_STACK (stack);
|
|
assert (tmp == i);
|
|
tmp = POP_STACK (stack);
|
|
assert (tmp == i);
|
|
i--;
|
|
}
|
|
assert (i == 0u - 1);
|
|
}
|
|
RELEASE_STACK (stack);
|
|
#ifndef NMETRICS
|
|
assert (!solver->statistics.allocated_current);
|
|
#endif
|
|
}
|
|
|
|
typedef struct odd_sized odd_sized;
|
|
|
|
struct odd_sized
|
|
{
|
|
unsigned a, b, c;
|
|
};
|
|
|
|
// *INDENT-OFF*
|
|
typedef STACK (odd_sized) odd_sized_stack;
|
|
// *INDENT-ON*
|
|
|
|
static void
|
|
test_shrink_stack (void)
|
|
{
|
|
DECLARE_AND_INIT_SOLVER (solver);
|
|
odd_sized element;
|
|
memset (&element, 0, sizeof element);
|
|
odd_sized_stack stack;
|
|
INIT_STACK (stack);
|
|
PUSH_STACK (stack, element);
|
|
PUSH_STACK (stack, element);
|
|
PUSH_STACK (stack, element);
|
|
PUSH_STACK (stack, element);
|
|
RESIZE_STACK (stack, 1);
|
|
SHRINK_STACK (stack);
|
|
RELEASE_STACK (stack);
|
|
#ifndef NMETRICS
|
|
assert (!solver->statistics.allocated_current);
|
|
#endif
|
|
}
|
|
|
|
void
|
|
tissat_schedule_stack (void)
|
|
{
|
|
SCHEDULE_FUNCTION (test_stack_basic);
|
|
SCHEDULE_FUNCTION (test_shrink_stack);
|
|
}
|