aoc-2024/day_17/solve_1.test.ts
2024-12-18 14:11:55 +09:00

116 lines
2.2 KiB
TypeScript

import { assertEquals } from "jsr:@std/assert";
import { VM } from "./solve_1.ts";
import { readData } from "./solve_1.ts";
Deno.test("C=9", () => {
const vm = new VM({
registers: {
A: 0,
B: 0,
C: 9,
},
programs: [
2, 6
]
});
vm.run();
assertEquals(vm.registers["C"], 9);
});
Deno.test("A=10", () => {
const vm = new VM({
registers: {
A: 10,
B: 0,
C: 0,
},
programs: [
5,0,5,1,5,4
]
});
const outputs: number[] = [];
vm.on("out", (a) => {
outputs.push(a);
});
vm.run();
assertEquals(outputs, [
0,1,2
]);
});
Deno.test("A=2024", ()=>{
const vm = new VM({
registers: {
A: 2024,
B: 0,
C: 0,
},
programs: [
0,1,5,4,3,0
]
});
const outputs: number[] = [];
vm.on("out", (a) => {
outputs.push(a);
});
vm.run();
assertEquals(outputs, [4,2,5,6,7,7,7,7,3,1,0]);
// leave a 0
assertEquals(vm.registers["A"], 0);
});
Deno.test("B=29", ()=> {
const vm = new VM({
registers: {
A: 0,
B: 29,
C: 0,
},
programs: [
1,7
]
});
vm.run();
assertEquals(vm.registers["B"], 26);
});
Deno.test("B=2024, C=43690", ()=>{
const vm = new VM({
registers: {
A: 0,
B: 2024,
C: 43690,
},
programs: [
4,0
]
});
vm.run();
assertEquals(vm.registers["B"], 44354);
});
Deno.test("B store test", ()=>{
const vm = new VM({
registers: {
A: 0,
B: 0,
C: 0,
},
programs: [
2,1
]
});
vm.run();
assertEquals(vm.registers["B"], 1);
})
Deno.test("example.txt", async () => {
const data = await readData(import.meta.dirname + "/example.txt");
const vm = new VM(data);
const outputs: number[] = [];
vm.on("out", (a) => {
outputs.push(a);
});
vm.run();
assertEquals(outputs, [4,6,3,5,6,3,5,2,1,0]);
});