File: inc_tests.sail

package info (click to toggle)
sail-ocaml 0.19.1%2Bdfsg5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,008 kB
  • sloc: ml: 75,941; ansic: 8,848; python: 1,342; exp: 560; sh: 474; makefile: 218; cpp: 36
file content (80 lines) | stat: -rw-r--r-- 1,907 bytes parent folder | download
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
default Order inc

$include <prelude.sail>

register R : bits(5) = 0b00011

val test_reg : unit -> unit

function test_reg() = {
    assert(R == 0b00011);
    assert(R[4] == bitone);
    R = 0b10000;
    assert(R[0] == bitone);
    assert(R[4] == bitzero);
    R[0] = bitzero;
    assert(R == 0b00000);
    R[0 .. 2] = 0b111;
    assert(R == 0b11100);
    (*(ref R))[0] = bitzero;
}

val test_slice : unit -> unit

function test_slice() = {
    assert(slice(0b10000, 0, 3) == 0b100);
    assert(slice(0b10000, 0, 1) == 0b1);
    assert(slice(0b10000, 1, 4) == 0b0000);
    assert(slice(0b10100, 1, 4) == 0b0100);
    assert(slice(0b10011, 1, 4) == 0b0011);
}

val main : unit -> unit

function main() = {
    let x: bits(2) = 0b10;
    assert(x[0] == bitone);
    assert(x[1] == bitzero);
    assert(unsigned(x) == 2);
    assert(signed(x) == -2);
    print_endline("ok 1");

    let x: bits(2) = [bitone, bitzero];
    assert(x[0] == bitone);
    assert(x[1] == bitzero);
    assert(unsigned(x) == 2);
    assert(signed(x) == -2);
    print_endline("ok 2");

    let x: bits(4) = 0b1100;
    assert(x[0..1] == 0b11);
    assert(x[1..2] == 0b10);
    assert(x[2..3] == 0b00);
    assert(x[0..3] == x);
    match x {
      0b11 @ y => assert(y == 0b00),
      _ => print_endline("unreachable"),
    };
    match x {
      [_] @ y @ [_] => assert(y[0] == bitone),
      _ => print_endline("unreachable"),
    };
    assert([x with 0 = bitzero] == 0b0100);
    assert([x with 0 = bitzero][0] == bitzero);
    assert([x with 0 .. 1 = 0b00] == 0x0);
    assert([x with 1 .. 3 = 0b111] == 0xF);
    print_endline("ok 3");

    assert(sail_zero_extend(0b10, 4) == 0b0010);
    assert(sail_sign_extend(0b10, 4) == 0b1110);

    print_bits("0b100 == ", 0b100);
    print_bits("0b001 == ", 0b001);
    print_endline("ok 4");

    test_reg();
    print_endline("ok 5");

    test_slice();
    print_endline("ok 6");
}