-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathops.test.ts
97 lines (86 loc) · 1.92 KB
/
ops.test.ts
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
//@ts-ignore
import { test, expect } from "bun:test";
test("push", () => {
const mem = [0, 0, 0];
let dsp = 3;
mem[--dsp] = 10;
expect(mem).toEqual([0, 0, 10]);
expect(dsp).toBe(2);
});
test("dup", () => {
const mem = [0, 0, 10];
let dsp = 2;
mem[--dsp] = mem[dsp + 1];
expect(mem).toEqual([0, 10, 10]);
expect(dsp).toBe(1);
});
test("over", () => {
const mem = [0, 20, 10];
let dsp = 1;
mem[--dsp] = mem[dsp + 2];
expect(mem).toEqual([10, 20, 10]);
expect(dsp).toBe(0);
});
test("swap", () => {
const mem = [0, 10, 20];
let dsp = 1;
const t = mem[dsp];
mem[dsp] = mem[dsp + 1];
mem[dsp + 1] = t;
expect(mem).toEqual([0, 20, 10]);
expect(dsp).toBe(1);
});
test("rot", () => {
// ( a b c -- b c a )
const mem = [0, 10, 20, 30];
let dsp = 1;
const t = mem[dsp + 2];
mem[dsp + 2] = mem[dsp + 1];
mem[dsp + 1] = mem[dsp];
mem[dsp] = t;
expect(mem).toEqual([0, 30, 10, 20]);
expect(dsp).toBe(1);
});
test("load", () => {
const mem = [2, 1, 10];
mem[0x201] = 23;
let dsp = 0;
mem[++dsp] = mem[(mem[dsp - 1] << 8) + mem[dsp]];
expect(mem.slice(0, 3)).toEqual([2, 23, 10]);
expect(dsp).toBe(1);
});
test("store", () => {
const mem = [2, 1, 10];
let dsp = 0;
mem[(mem[dsp++] << 8) + mem[dsp++]] = mem[dsp++];
expect(mem[0x201]).toBe(10);
expect(dsp).toBe(3);
});
test("add", () => {
const mem = [0, 10, 20];
let dsp = 1;
mem[++dsp] = (mem[dsp] + mem[dsp - 1]) & 0xff;
expect(mem).toEqual([0, 10, 30]);
expect(dsp).toBe(2);
});
test("sub", () => {
const mem = [0, 10, 40];
let dsp = 1;
mem[++dsp] = (mem[dsp] - mem[dsp - 1]) & 0xff;
expect(mem).toEqual([0, 10, 30]);
expect(dsp).toBe(2);
});
test("lt", () => {
const mem = [0, 20, 10];
let dsp = 1;
mem[++dsp] = ~~(mem[dsp] < mem[dsp - 1]);
expect(mem).toEqual([0, 20, 1]);
expect(dsp).toBe(2);
});
test("gt", () => {
const mem = [0, 10, 20];
let dsp = 1;
mem[++dsp] = ~~(mem[dsp] > mem[dsp - 1]);
expect(mem).toEqual([0, 10, 1]);
expect(dsp).toBe(2);
});