import { describe, it, expect } from 'vitest';
import { mul } from './0x02_MUL.js';
describe('MUL (0x02)', () => {
it('multiplies two numbers', () => {
const frame = createFrame([5n, 10n]);
expect(mul(frame)).toBeNull();
expect(frame.stack).toEqual([50n]);
});
it('handles overflow wrapping', () => {
const MAX = (1n << 256n) - 1n;
const frame = createFrame([MAX, 2n]);
expect(mul(frame)).toBeNull();
expect(frame.stack).toEqual([MAX - 1n]);
});
it('squares numbers correctly', () => {
const frame = createFrame([12n, 12n]);
expect(mul(frame)).toBeNull();
expect(frame.stack).toEqual([144n]);
});
it('handles multiplication by zero', () => {
const frame = createFrame([42n, 0n]);
expect(mul(frame)).toBeNull();
expect(frame.stack).toEqual([0n]);
});
it('handles multiplication by one', () => {
const frame = createFrame([42n, 1n]);
expect(mul(frame)).toBeNull();
expect(frame.stack).toEqual([42n]);
});
it('returns StackUnderflow with insufficient stack', () => {
const frame = createFrame([5n]);
expect(mul(frame)).toEqual({ type: 'StackUnderflow' });
});
it('consumes correct gas (5)', () => {
const frame = createFrame([5n, 10n], 100n);
expect(mul(frame)).toBeNull();
expect(frame.gasRemaining).toBe(95n);
});
});