// Copyright (C) 2017 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
description: >
    Including isConstructor.js will expose one function:

      isConstructor

includes: [isConstructor.js]
features: [generators, Reflect.construct]
---*/

assert.sameValue(typeof isConstructor, "function");

assert.sameValue(isConstructor(), false);
assert.sameValue(isConstructor(undefined), false);
assert.sameValue(isConstructor(null), false);
assert.sameValue(isConstructor(123), false);
assert.sameValue(isConstructor(true), false);
assert.sameValue(isConstructor(false), false);
assert.sameValue(isConstructor("string"), false);

assert.sameValue(isConstructor({}), false);
assert.sameValue(isConstructor([]), false);

assert.sameValue(isConstructor(function(){}), true);
assert.sameValue(isConstructor(function*(){}), false);
assert.sameValue(isConstructor(() => {}), false);

assert.sameValue(isConstructor(Array), true);
assert.sameValue(isConstructor(Array.prototype.map), false);
