test("function with duplicate parameter names", () => {
    function foo(bar, _, bar) {
        return bar;
    }
    expect(foo(1, 2, 3)).toBe(3);
});

test("syntax errors", () => {
    // Regular function in strict mode
    expect(`
        "use strict";
        function foo(bar, bar) {}
    `).not.toEval();

    // Arrow function in strict mode
    expect(`
        "use strict";
        const foo = (bar, bar) => {};
    `).not.toEval();

    // Arrow function in non-strict mode
    expect(`
        const foo = (bar, bar) => {};
    `).not.toEval();

    // Regular function with rest parameter
    expect(`
        function foo(bar, ...bar) {}
    `).not.toEval();

    // Arrow function with rest parameter
    expect(`
        const foo = (bar, ...bar) => {};
    `).not.toEval();

    // Regular function with default parameter
    expect(`
        function foo(bar, bar = 1) {}
    `).not.toEval();

    // Arrow function with default parameter
    expect(`
        const foo = (bar, bar = 1) => {};
    `).not.toEval();
});