File: main.c

package info (click to toggle)
cbmc 6.6.0-4
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,852 kB
  • sloc: cpp: 386,459; ansic: 114,466; java: 28,405; python: 6,003; yacc: 4,552; makefile: 4,041; lex: 2,487; xml: 2,388; sh: 2,050; perl: 557; pascal: 184; javascript: 163; ada: 36
file content (60 lines) | stat: -rw-r--r-- 947 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
58
59
60
#include <assert.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.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;
}