File: main.c

package info (click to toggle)
cbmc 5.10-5
  • links: PTS
  • area: main
  • in suites: buster
  • size: 73,416 kB
  • sloc: cpp: 264,330; ansic: 38,268; java: 19,025; python: 4,539; yacc: 4,275; makefile: 2,547; lex: 2,394; sh: 932; perl: 525; xml: 289; pascal: 169
file content (58 lines) | stat: -rw-r--r-- 929 bytes parent folder | download | duplicates (6)
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
58
#include <assert.h>
#include <stdint.h>
#include <stdlib.h>

typedef uint32_t literal;

literal neg (literal l)
{
  return l ^ 0x1;
}

typedef struct _clause
{
  struct clause *wl_next;
  struct clause *wl_prev;

  literal first_watch;
  literal second_watch;

  // End of first 16-byte cache line (on 32 bit machines)

  uint32_t length;
  literal body[0];

} clause;

clause * createClause (literal *lits, uint32_t count)
{
  assert(count >= 2);

  size_t s = sizeof(clause) + count * sizeof(literal);
  clause *c = malloc(s);

  memset(c,0,s);

  c->length = c;
  c->first_watch = lits[0];
  c->second_watch = lits[1];

  for (uint32_t i = 2; i < count; ++i)
  {
    c->body[i - 2] = lits[i];
  }

  return c;
}

int main (void) {
  uint32_t line[4] = {0x23, 0x42, 0x43, 0x22};

  clause *c = createClause(line,4);

  assert(c->wl_next == NULL);
  assert(c->wl_prev == NULL);
  assert(neg(c->body[1]) == 0x23);

  return 1;
}