function shouldThrow(func, errorMessage) {
    var errorThrown = false;
    var error = null;
    try {
        func();
    } catch (e) {
        errorThrown = true;
        error = e;
    }
    if (!errorThrown)
        throw new Error('not thrown');
    if (String(error) !== errorMessage)
        throw new Error(`bad error: ${String(error)}`);
}

var bf = (function(){}).bind();
Object.defineProperty(bf, "prototype", {
    get() { throw Error("OK") }
});

[
    Array,
    Date,
    Boolean,
    Function,
    Number,
    String,
    RegExp,
    Error,
    Uint8Array,
    ArrayBuffer,
    Map,
    WeakMap,
    Set,
    WeakSet,
].forEach(function (constructor) {
    shouldThrow(() => {
        Reflect.construct(constructor, [], bf);
    }, `Error: OK`);
});

shouldThrow(() => {
    Reflect.construct(Promise, [() => {}], bf);
}, `Error: OK`);

// Proxy constructor is not aware of new.target.
Reflect.construct(Proxy, [{}, {}], bf);
