'use strict'; const { Core } = require('./core.js'); const { DAT, MOV } = require('./instruction.js'); const CORESIZE = 8000; test('DAT does nothing and kills the program', () => { const core = new Core(CORESIZE); const pc = 0; const ins = core.data[pc]; expect(DAT(core, pc, ins)).toEqual([]); }); test('MOV correctly moves a full instruction', () => { const core = new Core(CORESIZE); const pc = 20; core.data[pc] = { opcode: 'MOV', a: { mode: 'direct', value: 0 }, b: { mode: 'direct', value: 1 }, }; const ins = core.data[pc]; expect(core.data[pc+1].opcode).toBe('DAT'); expect(MOV(core, pc, ins)).toEqual([pc+1]); expect(core.data[pc]).toEqual(core.data[pc+1]); expect(core.data[pc+1].opcode).toBe('MOV'); }); test('MOV correctly moves a B-field', () => { const core = new Core(CORESIZE); const pc = 20; core.data[pc] = { opcode: 'MOV', a: { mode: 'immediate', value: 100 }, b: { mode: 'direct', value: 1 }, }; const ins = core.data[pc]; expect(core.data[pc+1].opcode).toBe('DAT'); expect(MOV(core, pc, ins)).toEqual([pc+1]); expect(core.data[pc+1]).toEqual({ opcode: 'DAT', a: { mode: 'immediate', value: 0 }, b: { mode: 'immediate', value: 100 }, }); });