import { EXPECTED, INPUTS } from './.data.ts';
import { encode, decode } from '../../dist/index.js';

it.each(Object.keys(INPUTS))('%s', (name) => {
    const input = INPUTS[name];
    const expected = EXPECTED[name] ?? input;
    if (expected instanceof Error) {
        expect(() => {
            const encoded = encode(input);
            decode(encoded);
        }).toThrow(expected);
    } else {
        const encoded = encode(input);
        const decoded = decode(encoded);
        expect(decoded).toEqual(expected);
    }
});

test('decode ArrayBuffer', () => {
    const obj = { a: 1, b: undefined, c: { d: 2, e: undefined, f: null } };
    expect(decode(encode(obj).buffer)).toEqual(obj);
});

test('decode Int8Array', () => {
    const obj = { a: 1, b: undefined, c: { d: 2, e: undefined, f: null } };
    expect(decode(new Int8Array(encode(obj).buffer))).toEqual(obj);
});
