aboutsummaryrefslogtreecommitdiffstats
path: root/lib/csc/encoding-test.csc
blob: 6b28d8ee2f5d5e235d5005b5b1e13dd7583146d8 (plain) (blame)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
(define-library (csc encoding-test)
  (import (scheme base)
          (only (csc testing)
            assert-equal
            test)
          (csc encoding))
  (begin


    (test encode-mov
      (assert-equal
        #u8(0 1 2)
        (encode '((mov (local 1) (local 2))))))


    (test encode-int
      (assert-equal
        #u8(2 1 #x15 0 0 0 0 0 0 0)
        (encode '((mov (local 1) (const 10))))))


    (test encode-negative-int
      (assert-equal
        #u8(2 1 #xed #xff #xff #xff #xff #xff #xff #xff)
        (encode '((mov (local 1) (const -10))))))


    (test encode-true
      (assert-equal
        #u8(2 1 #xa 0 0 0 0 0 0 0)
        (encode '((mov (local 1) (const #t))))))


    (test encode-false
      (assert-equal
        #u8(2 1 #x2 0 0 0 0 0 0 0)
        (encode '((mov (local 1) (const #f))))))


    (test encode-nil
      (assert-equal
        #u8(2 1 #x12 0 0 0 0 0 0 0)
        (encode '((mov (local 1) (const ()))))))


    (test encode-jmpif
      (assert-equal
        #u8(4 1 2)
        (encode '((jmpif (local 1) (local 2))))))


    (test encode-jmp
      (assert-equal
        #u8(8 1)
        (encode '((jmp (local 1))))))


    (test encode-alloc
      (assert-equal
        #u8(12 1 2)
        (encode '((alloc (local 1) (local 2))))))


    (test encode-peek
      (assert-equal
        #u8(17 1 2 1 0 0 0 0 0 0 0)
        (encode '((peek (local 1) (local 2) (const 0))))))


    (test encode-poke
      (assert-equal
        #u8(23 #x15 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0)
        (encode '((poke (const 10) (local 1) (const 0))))))


    (test encode-add
      (assert-equal
        #u8(24 1 2 3)
        (encode '((add (local 1) (local 2) (local 3))))))


    (test encode-sub
      (assert-equal
        #u8(28 1 2 3)
        (encode '((sub (local 1) (local 2) (local 3))))))


    (test encode-mul
      (assert-equal
        #u8(32 1 2 3)
        (encode '((mul (local 1) (local 2) (local 3))))))


    (test encode-div
      (assert-equal
        #u8(36 1 2 3)
        (encode '((div (local 1) (local 2) (local 3))))))


    (test encode-mod
      (assert-equal
        #u8(40 1 2 3)
        (encode '((mod (local 1) (local 2) (local 3))))))


    (test encode-peekbyte
      (assert-equal
        #u8(44 1 2 3)
        (encode '((peekbyte (local 1) (local 2) (local 3))))))


    (test encode-pokebyte
      (assert-equal
        #u8(48 1 2 3)
        (encode '((pokebyte (local 1) (local 2) (local 3))))))


    (test encode-exit
      (assert-equal
        #u8(#x36 #x1 0 0 0 0 0 0 0)
        (encode '((exit (const 0))))))))