//@ runBigIntEnabled

assert = {
    sameValue: function (input, expected, message) {
        if (input !== expected)
            throw new Error(message);
    }
};

let o = {
    [Symbol.toPrimitive]: function() {
        throw new Error("Bad");
    }
};

try{
    o ^ Symbol("2");
    assert.sameValue(true, false, "Exception expected to be throwed, but executed without error");
} catch (e) {
    assert.sameValue(e.message, "Bad", "Expected to throw Error('Bad'), but got: " + e);
}

try{
    Symbol("2") ^ o;
    assert.sameValue(true, false, "Exception expected to be throwed, but executed without error");
} catch (e) {
    assert.sameValue(e instanceof TypeError, true, "Expected to throw TypeError, but got: " + e)
}