summaryrefslogtreecommitdiff
path: root/test/c/eq_struct.sail
blob: 2f6d4453ab1f8c80a2ebaa1d4dafa10ee99b7764 (plain)
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
default Order dec

$include <flow.sail>
$include <exception_basic.sail>

val eq = { lem: "eq", _: "eq_anything" } : forall ('a : Type). ('a, 'a) -> bool

overload operator == = {eq}

val neq : forall ('a : Type). ('a, 'a) -> bool

overload operator != = {neq}

overload ~ = {not_bool}

function neq(x, y) = ~(eq(x, y))

struct S = {
  field1: int,
  field2: bitvector(8, dec)
}

val "print" : string -> unit

val main : unit -> unit effect {escape}

function main() = {
  let s : S = struct {
    field1 = 4,
    field2 = 0xFF
  };
  assert(s == s, "1");
  assert(~(s == { s with field2 = 0xAB }), "2");
  assert(s != { s with field1 = 5}, "3");
  assert(s == { s with field2 = 0xFF });
  assert({ s with field1 = 0} == {s with field1 = 0});
  print("ok\n")
}