import { describe, it, expect } from 'vitest';
import { mod } from './0x06_MOD.js';
describe('MOD (0x06)', () => {
it('computes modulo', () => {
const frame = createFrame([10n, 3n]);
expect(mod(frame)).toBeNull();
expect(frame.stack).toEqual([1n]);
});
it('handles modulo by zero', () => {
const frame = createFrame([42n, 0n]);
expect(mod(frame)).toBeNull();
expect(frame.stack).toEqual([0n]);
});
it('handles zero modulo zero', () => {
const frame = createFrame([0n, 0n]);
expect(mod(frame)).toBeNull();
expect(frame.stack).toEqual([0n]);
});
it('checks even number', () => {
const frame = createFrame([42n, 2n]);
expect(mod(frame)).toBeNull();
expect(frame.stack).toEqual([0n]);
});
it('checks odd number', () => {
const frame = createFrame([43n, 2n]);
expect(mod(frame)).toBeNull();
expect(frame.stack).toEqual([1n]);
});
it('handles n % n = 0', () => {
const frame = createFrame([42n, 42n]);
expect(mod(frame)).toBeNull();
expect(frame.stack).toEqual([0n]);
});
it('handles n % 1 = 0', () => {
const frame = createFrame([42n, 1n]);
expect(mod(frame)).toBeNull();
expect(frame.stack).toEqual([0n]);
});
it('handles a < b case', () => {
const frame = createFrame([5n, 10n]);
expect(mod(frame)).toBeNull();
expect(frame.stack).toEqual([5n]);
});
it('consumes correct gas (5)', () => {
const frame = createFrame([10n, 3n], 100n);
expect(mod(frame)).toBeNull();
expect(frame.gasRemaining).toBe(95n);
});
});