import assert from 'node:assert/strict'; function alu(a, b, op) { if (op === 0) { const wide = a + b; return { y: wide & 255, flag: Number(wide > 255) }; } if (op === 1) return { y: (a - b) & 255, flag: Number(a < b) }; if (op === 2) return { y: a & b, flag: 0 }; if (op === 3) return { y: a ^ b, flag: 0 }; throw new RangeError('operation'); } assert.deepEqual(alu(250, 10, 0), { y: 4, flag: 1 }); assert.deepEqual(alu(3, 5, 1), { y: 254, flag: 1 }); assert.deepEqual(alu(170, 204, 2), { y: 136, flag: 0 }); assert.deepEqual(alu(170, 204, 3), { y: 102, flag: 0 }); let checks = 0; for (let a = 0; a < 256; a++) { for (let b = 0; b < 256; b++) { const add = alu(a, b, 0), sub = alu(a, b, 1); assert.equal(add.y + 256 * add.flag, a + b); assert.equal(sub.y - 256 * sub.flag, a - b); assert.equal(alu(a, b, 2).y | alu(a, b, 3).y, a | b); checks += 3; } } console.log(`ALU PASS: ${checks} identities`);