-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcpu-emulator.test.js
51 lines (49 loc) · 1.05 KB
/
cpu-emulator.test.js
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
const { cpuEmulator } = require('./cpu-emulator.js');
const { assembler } = require('./assembler.js');
describe('cpuEmulator', () => {
it('works', () => {
expect(cpuEmulator(['@2', 'D=A', '@2', 'D=D+A', '@0', 'M=D'])).toEqual({
A: 0,
D: 4,
M: expect.anything(),
RAM: [4],
});
expect(
cpuEmulator(
assembler(
`
// Adds 1+...+100.
@i // i refers to some mem. location.
M=1 // i=1
@sum // sum refers to some mem. location.
M=0 // sum=0
(LOOP)
@i
D=M // D=i
@100
D=D-A // D=i-100
@END
D;JGT // If (i-100)>0 goto END
@i
D=M // D=i
@sum
M=D+M // sum=sum+i
@i
M=M+1 // i=i+1
@LOOP
0;JMP // Goto LOOP
(END)
@END
BREAK
`,
{ renderUnlabeled: true }
)
)
).toEqual({
A: 18,
D: 1,
M: expect.anything(),
RAM: [...new Array(16), 101, 5050],
});
});
});