aboutsummaryrefslogtreecommitdiffstats
path: root/csc/encoding-test.csc
blob: fb9fe21d2a9a8a6a3f7adfb1a774843f5b3c18e4 (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
(import (scheme base)
        (only (csc testing)
          assert-equal
          test)
        (csc encoding))


(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(52)
    (encode '((exit)))))