File: testarray.c

package info (click to toggle)
kissat 4.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,068 kB
  • sloc: ansic: 39,201; sh: 1,226; makefile: 91
file content (57 lines) | stat: -rw-r--r-- 1,454 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "test.h"

#include "../src/array.h"

typedef struct pair pair;

struct pair {
  unsigned first;
  unsigned second;
};

static void test_array_basic (void) {
  DECLARE_AND_INIT_SOLVER (solver);
  ARRAY (pair) array;
  memset (&array, 0, sizeof array);
  assert (EMPTY_ARRAY (array));
  size_t size = 0;
  unsigned sum = 0;
  for (unsigned l = 0; l <= 10; l++) {
    size_t new_size = 1u << l;
    REALLOCATE_ARRAY (array, size, new_size);
    for (unsigned i = 0; i < size; i++) {
      pair pair = PEEK_ARRAY (array, i);
      assert (pair.first == i);
      assert (pair.second == ~i);
    }
    for (unsigned i = size; i < new_size; i++) {
      pair pair;
      pair.first = i;
      pair.second = ~i;
      PUSH_ARRAY (array, pair);
      sum += i;
    }
    assert (!EMPTY_ARRAY (array));
    assert (SIZE_ARRAY (array) == new_size);
    size = new_size;
  }
  pair *a = BEGIN_ARRAY (array);
  for (unsigned i = 0; i < size; i++) {
    pair *p = &a[i];
    SWAP (unsigned, p->first, p->second);
  }
  for (all_stack (pair, pair, array))
    sum -= pair.second;
  assert (!sum);
  for (unsigned expect = size - 1; !EMPTY_ARRAY (array); expect--) {
    pair pair = POP_ARRAY (array);
    assert (pair.first == ~expect);
    assert (pair.second == expect);
  }
  RELEASE_ARRAY (array, size);
#ifdef METRICS
  assert (!solver->statistics.allocated_current);
#endif
}

void tissat_schedule_array (void) { SCHEDULE_FUNCTION (test_array_basic); }