test("constructor properties", () => {
    expect(WeakRef).toHaveLength(1);
    expect(WeakRef.name).toBe("WeakRef");
});

describe("errors", () => {
    test("invalid array iterators", () => {
        [-100, Infinity, NaN, 152n, undefined].forEach(value => {
            expect(() => {
                new WeakRef(value);
            }).toThrowWithMessage(TypeError, "cannot be held weakly");
        });
    });
    test("called without new", () => {
        expect(() => {
            WeakRef();
        }).toThrowWithMessage(TypeError, "WeakRef constructor must be called with 'new'");
    });
});

describe("normal behavior", () => {
    test("typeof", () => {
        expect(typeof new WeakRef({})).toBe("object");
    });

    test("constructor with single object argument", () => {
        var a = new WeakRef({});
        expect(a instanceof WeakRef).toBeTrue();
    });

    test("constructor with single symbol argument", () => {
        var a = new WeakRef(Symbol());
        expect(a instanceof WeakRef).toBeTrue();
    });
});