Home Reference Source Test

specs/type.spec.js

import * as chai from 'chai';
import { assert, expect } from 'chai';

import * as TypeLib from '../src/Type';
import * as TypeConstants from '../src/Constants/types';


/** @test {Type} */
describe('Type Library Tests', () => {

  /** @test {Type#isNull} */
  it('test: .isNull(value)', () => {
    assert.isTrue(TypeLib.isNull(null));

    assert.isFalse(TypeLib.isNull(undefined));
    assert.isFalse(TypeLib.isNull(0));
    assert.isFalse(TypeLib.isNull(-0));
    assert.isFalse(TypeLib.isNull(''));
    assert.isFalse(TypeLib.isNull(false));
    assert.isFalse(TypeLib.isNull({}));
    assert.isFalse(TypeLib.isNull([]));
    assert.isFalse(TypeLib.isNull(NaN));
    assert.isFalse(TypeLib.isNull(Infinity));
    assert.isFalse(TypeLib.isNull(-Infinity));
    assert.isFalse(TypeLib.isNull(Symbol('test:')));
    assert.isFalse(TypeLib.isNull(Function.prototype));
  });

  /** @test {Type#isNotNull} */
  it('test: .isNotNull(value)', () => {
    assert.isFalse(TypeLib.isNotNull(null));

    assert.isTrue(TypeLib.isNotNull(undefined));
    assert.isTrue(TypeLib.isNotNull(0));
    assert.isTrue(TypeLib.isNotNull(-0));
    assert.isTrue(TypeLib.isNotNull(''));
    assert.isTrue(TypeLib.isNotNull(false));
    assert.isTrue(TypeLib.isNotNull({}));
    assert.isTrue(TypeLib.isNotNull([]));
    assert.isTrue(TypeLib.isNotNull(NaN));
    assert.isTrue(TypeLib.isNotNull(Infinity));
    assert.isTrue(TypeLib.isNotNull(-Infinity));
    assert.isTrue(TypeLib.isNotNull(Symbol('test:')));
    assert.isTrue(TypeLib.isNotNull(Function.prototype));
  });

  /** @test {Type#isNaN} */
  it('test: .isNaN(number)', () => {
    assert.isTrue(TypeLib.isNaN(NaN));

    assert.isFalse(TypeLib.isNaN(null));
    assert.isFalse(TypeLib.isNaN(undefined));
    assert.isFalse(TypeLib.isNaN(0));
    assert.isFalse(TypeLib.isNaN(-0));
    assert.isFalse(TypeLib.isNaN(''));
    assert.isFalse(TypeLib.isNaN(false));
    assert.isFalse(TypeLib.isNaN({}));
    assert.isFalse(TypeLib.isNaN([]));
    assert.isFalse(TypeLib.isNaN(Infinity));
    assert.isFalse(TypeLib.isNaN(-Infinity));
    assert.isFalse(TypeLib.isNaN(Symbol('test:')));
    assert.isFalse(TypeLib.isNaN(Function.prototype));
  });

  /** @test {Type#isNotNaN} */
  it('test: .isNotNaN(number)', () => {
    assert.isFalse(TypeLib.isNotNaN(NaN));

    assert.isTrue(TypeLib.isNotNaN(null));
    assert.isTrue(TypeLib.isNotNaN(undefined));
    assert.isTrue(TypeLib.isNotNaN(0));
    assert.isTrue(TypeLib.isNotNaN(-0));
    assert.isTrue(TypeLib.isNotNaN(''));
    assert.isTrue(TypeLib.isNotNaN(false));
    assert.isTrue(TypeLib.isNotNaN({}));
    assert.isTrue(TypeLib.isNotNaN([]));
    assert.isTrue(TypeLib.isNotNaN(Infinity));
    assert.isTrue(TypeLib.isNotNaN(-Infinity));
    assert.isTrue(TypeLib.isNotNaN(Symbol('test:')));
    assert.isTrue(TypeLib.isNotNaN(Function.prototype));
  });

  /** @test {Type#isNegativeZero} */
  it('test: .isNegativeZero(number)', () => {
    assert.isTrue(TypeLib.isNegativeZero(-0));

    assert.isFalse(TypeLib.isNegativeZero(0));
    assert.isFalse(TypeLib.isNegativeZero(7));
    assert.isFalse(TypeLib.isNegativeZero(-7));
    assert.isFalse(TypeLib.isNegativeZero(NaN));
    assert.isFalse(TypeLib.isNegativeZero(Infinity));
    assert.isFalse(TypeLib.isNegativeZero(-Infinity));
  });

  /** @test {Type#isNotNegativeZero} */
  it('test: .isNotNegativeZero(number)', () => {
    assert.isFalse(TypeLib.isNotNegativeZero(-0));

    assert.isTrue(TypeLib.isNotNegativeZero(0));
    assert.isTrue(TypeLib.isNotNegativeZero(7));
    assert.isTrue(TypeLib.isNotNegativeZero(-7));
    assert.isTrue(TypeLib.isNotNegativeZero(NaN));
    assert.isTrue(TypeLib.isNotNegativeZero(Infinity));
    assert.isTrue(TypeLib.isNotNegativeZero(-Infinity));
  });

  /** @test {Type#isArray} */
  it('test: .isArray(value)', () => {
    assert.isTrue(TypeLib.isArray([]));

    assert.isFalse(TypeLib.isArray(null));
    assert.isFalse(TypeLib.isArray(undefined));
    assert.isFalse(TypeLib.isArray(0));
    assert.isFalse(TypeLib.isArray(-0));
    assert.isFalse(TypeLib.isArray(''));
    assert.isFalse(TypeLib.isArray(false));
    assert.isFalse(TypeLib.isArray({}));
    assert.isFalse(TypeLib.isArray(NaN));
    assert.isFalse(TypeLib.isArray(Infinity));
    assert.isFalse(TypeLib.isArray(-Infinity));
    assert.isFalse(TypeLib.isArray(Symbol('test:')));
    assert.isFalse(TypeLib.isArray(Function.prototype));
  });

  /** @test {Type#isNotArray} */
  it('test: .isNotArray(value)', () => {
    assert.isFalse(TypeLib.isNotArray([]));

    assert.isTrue(TypeLib.isNotArray(null));
    assert.isTrue(TypeLib.isNotArray(undefined));
    assert.isTrue(TypeLib.isNotArray(0));
    assert.isTrue(TypeLib.isNotArray(-0));
    assert.isTrue(TypeLib.isNotArray(''));
    assert.isTrue(TypeLib.isNotArray(false));
    assert.isTrue(TypeLib.isNotArray({}));
    assert.isTrue(TypeLib.isNotArray(NaN));
    assert.isTrue(TypeLib.isNotArray(Infinity));
    assert.isTrue(TypeLib.isNotArray(-Infinity));
    assert.isTrue(TypeLib.isNotArray(Symbol('test:')));
    assert.isTrue(TypeLib.isNotArray(Function.prototype));
  });

  /** @test {Type#isNumber} */
  it('test: .isNumber(value)', () => {
    assert.isTrue(TypeLib.isNumber(0));
    assert.isTrue(TypeLib.isNumber(-0));
    assert.isTrue(TypeLib.isNumber(NaN));
    assert.isTrue(TypeLib.isNumber(Infinity));
    assert.isTrue(TypeLib.isNumber(-Infinity));

    assert.isFalse(TypeLib.isNumber([]));
    assert.isFalse(TypeLib.isNumber(null));
    assert.isFalse(TypeLib.isNumber(undefined));
    assert.isFalse(TypeLib.isNumber(''));
    assert.isFalse(TypeLib.isNumber(false));
    assert.isFalse(TypeLib.isNumber({}));
    assert.isFalse(TypeLib.isNumber(Symbol('test:')));
    assert.isFalse(TypeLib.isNumber(Function.prototype));
  });

  /** @test {Type#isNotNumber} */
  it('test: .isNotNumber(value)', () => {
    assert.isFalse(TypeLib.isNotNumber(0));
    assert.isFalse(TypeLib.isNotNumber(-0));
    assert.isFalse(TypeLib.isNotNumber(NaN));
    assert.isFalse(TypeLib.isNotNumber(Infinity));
    assert.isFalse(TypeLib.isNotNumber(-Infinity));

    assert.isTrue(TypeLib.isNotNumber([]));
    assert.isTrue(TypeLib.isNotNumber(null));
    assert.isTrue(TypeLib.isNotNumber(undefined));
    assert.isTrue(TypeLib.isNotNumber(''));
    assert.isTrue(TypeLib.isNotNumber(false));
    assert.isTrue(TypeLib.isNotNumber({}));
    assert.isTrue(TypeLib.isNotNumber(Symbol('test:')));
    assert.isTrue(TypeLib.isNotNumber(Function.prototype));
  });

  /** @test {Type#isUndefined} */
  it('test: .isUndefined(value)', () => {
    assert.isTrue(TypeLib.isUndefined(undefined));

    assert.isFalse(TypeLib.isUndefined(0));
    assert.isFalse(TypeLib.isUndefined(-0));
    assert.isFalse(TypeLib.isUndefined(NaN));
    assert.isFalse(TypeLib.isUndefined(Infinity));
    assert.isFalse(TypeLib.isUndefined(-Infinity));
    assert.isFalse(TypeLib.isUndefined([]));
    assert.isFalse(TypeLib.isUndefined(null));
    assert.isFalse(TypeLib.isUndefined(''));
    assert.isFalse(TypeLib.isUndefined(false));
    assert.isFalse(TypeLib.isUndefined(/[\[\]']+/g));
    assert.isFalse(TypeLib.isUndefined({}));
    assert.isFalse(TypeLib.isUndefined(Symbol('test:')));
    assert.isFalse(TypeLib.isUndefined(Function.prototype));
  });

  /** @test {Type#isNotUndefined} */
  it('test: .isNotUndefined(value)', () => {
    assert.isFalse(TypeLib.isNotUndefined(undefined));

    assert.isTrue(TypeLib.isNotUndefined(0));
    assert.isTrue(TypeLib.isNotUndefined(-0));
    assert.isTrue(TypeLib.isNotUndefined(NaN));
    assert.isTrue(TypeLib.isNotUndefined(Infinity));
    assert.isTrue(TypeLib.isNotUndefined(-Infinity));
    assert.isTrue(TypeLib.isNotUndefined([]));
    assert.isTrue(TypeLib.isNotUndefined(null));
    assert.isTrue(TypeLib.isNotUndefined(''));
    assert.isTrue(TypeLib.isNotUndefined(false));
    assert.isTrue(TypeLib.isNotUndefined(/[\[\]']+/g));
    assert.isTrue(TypeLib.isNotUndefined({}));
    assert.isTrue(TypeLib.isNotUndefined(Symbol('test:')));
    assert.isTrue(TypeLib.isNotUndefined(Function.prototype));
  });

  /** @test {Type#isDate} */
  it('test: .isDate(value)', () => {
    assert.isTrue(TypeLib.isDate(new Date()));

    assert.isFalse(TypeLib.isDate(undefined));
    assert.isFalse(TypeLib.isDate(0));
    assert.isFalse(TypeLib.isDate(-0));
    assert.isFalse(TypeLib.isDate(NaN));
    assert.isFalse(TypeLib.isDate(Infinity));
    assert.isFalse(TypeLib.isDate(-Infinity));
    assert.isFalse(TypeLib.isDate([]));
    assert.isFalse(TypeLib.isDate(null));
    assert.isFalse(TypeLib.isDate(''));
    assert.isFalse(TypeLib.isDate(false));
    assert.isFalse(TypeLib.isDate(/[\[\]']+/g));
    assert.isFalse(TypeLib.isDate({}));
    assert.isFalse(TypeLib.isDate(Symbol('test:')));
    assert.isFalse(TypeLib.isDate(Function.prototype));
  });

  /** @test {Type#isNotDate} */
  it('test: .isNotDate(value)', () => {
    assert.isFalse(TypeLib.isNotDate(new Date()));

    assert.isTrue(TypeLib.isNotDate(undefined));
    assert.isTrue(TypeLib.isNotDate(0));
    assert.isTrue(TypeLib.isNotDate(-0));
    assert.isTrue(TypeLib.isNotDate(NaN));
    assert.isTrue(TypeLib.isNotDate(Infinity));
    assert.isTrue(TypeLib.isNotDate(-Infinity));
    assert.isTrue(TypeLib.isNotDate([]));
    assert.isTrue(TypeLib.isNotDate(null));
    assert.isTrue(TypeLib.isNotDate(''));
    assert.isTrue(TypeLib.isNotDate(false));
    assert.isTrue(TypeLib.isNotDate(/[\[\]']+/g));
    assert.isTrue(TypeLib.isNotDate({}));
    assert.isTrue(TypeLib.isNotDate(Symbol('test:')));
    assert.isTrue(TypeLib.isNotDate(Function.prototype));
  });

  /** @test {Type#isObject} */
  it('test: .isObject(value)', () => {
    assert.isTrue(TypeLib.isObject({}));
    assert.isTrue(TypeLib.isObject(new Object()));

    assert.isFalse(TypeLib.isObject(new Date()));
    assert.isFalse(TypeLib.isObject(undefined));
    assert.isFalse(TypeLib.isObject(0));
    assert.isFalse(TypeLib.isObject(-0));
    assert.isFalse(TypeLib.isObject(NaN));
    assert.isFalse(TypeLib.isObject(Infinity));
    assert.isFalse(TypeLib.isObject(-Infinity));
    assert.isFalse(TypeLib.isObject([]));
    assert.isFalse(TypeLib.isObject(null));
    assert.isFalse(TypeLib.isObject(''));
    assert.isFalse(TypeLib.isObject(false));
    assert.isFalse(TypeLib.isObject(/[\[\]']+/g));
    assert.isFalse(TypeLib.isObject(Symbol('test:')));
    assert.isFalse(TypeLib.isObject(Function.prototype));
  });

  /** @test {Type#isNotObject} */
  it('test: .isNotObject(value)', () => {
    assert.isFalse(TypeLib.isNotObject({}));
    assert.isFalse(TypeLib.isNotObject(new Object()));

    assert.isTrue(TypeLib.isNotObject(new Date()));
    assert.isTrue(TypeLib.isNotObject(undefined));
    assert.isTrue(TypeLib.isNotObject(0));
    assert.isTrue(TypeLib.isNotObject(-0));
    assert.isTrue(TypeLib.isNotObject(NaN));
    assert.isTrue(TypeLib.isNotObject(Infinity));
    assert.isTrue(TypeLib.isNotObject(-Infinity));
    assert.isTrue(TypeLib.isNotObject([]));
    assert.isTrue(TypeLib.isNotObject(null));
    assert.isTrue(TypeLib.isNotObject(''));
    assert.isTrue(TypeLib.isNotObject(false));
    assert.isTrue(TypeLib.isNotObject(/[\[\]']+/g));
    assert.isTrue(TypeLib.isNotObject(Symbol('test:')));
    assert.isTrue(TypeLib.isNotObject(Function.prototype));
  });

  /** @test {Type#isBoolean} */
  it('test: .isBoolean(value)', () => {
    assert.isTrue(TypeLib.isBoolean(false));
    assert.isTrue(TypeLib.isBoolean(new Boolean(false)));

    assert.isFalse(TypeLib.isBoolean({}));
    assert.isFalse(TypeLib.isBoolean(new Object()));
    assert.isFalse(TypeLib.isBoolean(new Date()));
    assert.isFalse(TypeLib.isBoolean(undefined));
    assert.isFalse(TypeLib.isBoolean(0));
    assert.isFalse(TypeLib.isBoolean(-0));
    assert.isFalse(TypeLib.isBoolean(NaN));
    assert.isFalse(TypeLib.isBoolean(Infinity));
    assert.isFalse(TypeLib.isBoolean(-Infinity));
    assert.isFalse(TypeLib.isBoolean([]));
    assert.isFalse(TypeLib.isBoolean(null));
    assert.isFalse(TypeLib.isBoolean(''));
    assert.isFalse(TypeLib.isBoolean(/[\[\]']+/g));
    assert.isFalse(TypeLib.isBoolean(Symbol('test:')));
    assert.isFalse(TypeLib.isBoolean(Function.prototype));
  });

  /** @test {Type#isNotBoolean} */
  it('test: .isNotBoolean(value)', () => {
    assert.isFalse(TypeLib.isNotBoolean(false));
    assert.isFalse(TypeLib.isNotBoolean(new Boolean(false)));

    assert.isTrue(TypeLib.isNotBoolean({}));
    assert.isTrue(TypeLib.isNotBoolean(new Object()));
    assert.isTrue(TypeLib.isNotBoolean(new Date()));
    assert.isTrue(TypeLib.isNotBoolean(undefined));
    assert.isTrue(TypeLib.isNotBoolean(0));
    assert.isTrue(TypeLib.isNotBoolean(-0));
    assert.isTrue(TypeLib.isNotBoolean(NaN));
    assert.isTrue(TypeLib.isNotBoolean(Infinity));
    assert.isTrue(TypeLib.isNotBoolean(-Infinity));
    assert.isTrue(TypeLib.isNotBoolean([]));
    assert.isTrue(TypeLib.isNotBoolean(null));
    assert.isTrue(TypeLib.isNotBoolean(''));
    assert.isTrue(TypeLib.isNotBoolean(/[\[\]']+/g));
    assert.isTrue(TypeLib.isNotBoolean(Symbol('test:')));
    assert.isTrue(TypeLib.isNotBoolean(Function.prototype));
  });

  /** @test {Type#isSymbol} */
  it('test: .isSymbol(value)', () => {
    assert.isTrue(TypeLib.isSymbol(Symbol('test:')));

    assert.isFalse(TypeLib.isSymbol(false));
    assert.isFalse(TypeLib.isSymbol(new Boolean(false)));
    assert.isFalse(TypeLib.isSymbol({}));
    assert.isFalse(TypeLib.isSymbol(new Object()));
    assert.isFalse(TypeLib.isSymbol(new Date()));
    assert.isFalse(TypeLib.isSymbol(undefined));
    assert.isFalse(TypeLib.isSymbol(0));
    assert.isFalse(TypeLib.isSymbol(-0));
    assert.isFalse(TypeLib.isSymbol(NaN));
    assert.isFalse(TypeLib.isSymbol(Infinity));
    assert.isFalse(TypeLib.isSymbol(-Infinity));
    assert.isFalse(TypeLib.isSymbol([]));
    assert.isFalse(TypeLib.isSymbol(null));
    assert.isFalse(TypeLib.isSymbol(''));
    assert.isFalse(TypeLib.isSymbol(/[\[\]']+/g));
    assert.isFalse(TypeLib.isSymbol(Function.prototype));
  });

  /** @test {Type#isNotSymbol} */
  it('test: .isNotSymbol(value)', () => {
    assert.isFalse(TypeLib.isNotSymbol(Symbol('test:')));

    assert.isTrue(TypeLib.isNotSymbol(false));
    assert.isTrue(TypeLib.isNotSymbol(new Boolean(false)));
    assert.isTrue(TypeLib.isNotSymbol({}));
    assert.isTrue(TypeLib.isNotSymbol(new Object()));
    assert.isTrue(TypeLib.isNotSymbol(new Date()));
    assert.isTrue(TypeLib.isNotSymbol(undefined));
    assert.isTrue(TypeLib.isNotSymbol(0));
    assert.isTrue(TypeLib.isNotSymbol(-0));
    assert.isTrue(TypeLib.isNotSymbol(NaN));
    assert.isTrue(TypeLib.isNotSymbol(Infinity));
    assert.isTrue(TypeLib.isNotSymbol(-Infinity));
    assert.isTrue(TypeLib.isNotSymbol([]));
    assert.isTrue(TypeLib.isNotSymbol(null));
    assert.isTrue(TypeLib.isNotSymbol(''));
    assert.isTrue(TypeLib.isNotSymbol(/[\[\]']+/g));
    assert.isTrue(TypeLib.isNotSymbol(Function.prototype));
  });

  /** @test {Type#isString} */
  it('test: .isString(value)', () => {
    assert.isTrue(TypeLib.isString(''));
    assert.isTrue(TypeLib.isString(new String()));

    assert.isFalse(TypeLib.isString(false));
    assert.isFalse(TypeLib.isString(new Boolean(false)));
    assert.isFalse(TypeLib.isString({}));
    assert.isFalse(TypeLib.isString(new Object()));
    assert.isFalse(TypeLib.isString(new Date()));
    assert.isFalse(TypeLib.isString(undefined));
    assert.isFalse(TypeLib.isString(0));
    assert.isFalse(TypeLib.isString(-0));
    assert.isFalse(TypeLib.isString(NaN));
    assert.isFalse(TypeLib.isString(Infinity));
    assert.isFalse(TypeLib.isString(-Infinity));
    assert.isFalse(TypeLib.isString([]));
    assert.isFalse(TypeLib.isString(null));
    assert.isFalse(TypeLib.isString(/[\[\]']+/g));
    assert.isFalse(TypeLib.isString(Symbol('test:')));
    assert.isFalse(TypeLib.isString(Function.prototype));
  });

  /** @test {Type#isNotString} */
  it('test: .isNotString(value)', () => {
    assert.isFalse(TypeLib.isNotString(''));
    assert.isFalse(TypeLib.isNotString(new String()));

    assert.isTrue(TypeLib.isNotString(false));
    assert.isTrue(TypeLib.isNotString(new Boolean(false)));
    assert.isTrue(TypeLib.isNotString({}));
    assert.isTrue(TypeLib.isNotString(new Object()));
    assert.isTrue(TypeLib.isNotString(new Date()));
    assert.isTrue(TypeLib.isNotString(undefined));
    assert.isTrue(TypeLib.isNotString(0));
    assert.isTrue(TypeLib.isNotString(-0));
    assert.isTrue(TypeLib.isNotString(NaN));
    assert.isTrue(TypeLib.isNotString(Infinity));
    assert.isTrue(TypeLib.isNotString(-Infinity));
    assert.isTrue(TypeLib.isNotString([]));
    assert.isTrue(TypeLib.isNotString(null));
    assert.isTrue(TypeLib.isNotString(/[\[\]']+/g));
    assert.isTrue(TypeLib.isNotString(Symbol('test:')));
    assert.isTrue(TypeLib.isNotString(Function.prototype));
  });

  /** @test {Type#isRegExp} */
  it('test: .isRegExp(value)', () => {
    assert.isTrue(TypeLib.isRegExp(/[\[\]']+/g));
    assert.isTrue(TypeLib.isRegExp(new RegExp()));

    assert.isFalse(TypeLib.isRegExp(undefined));
    assert.isFalse(TypeLib.isRegExp(0));
    assert.isFalse(TypeLib.isRegExp(-0));
    assert.isFalse(TypeLib.isRegExp(NaN));
    assert.isFalse(TypeLib.isRegExp(Infinity));
    assert.isFalse(TypeLib.isRegExp(-Infinity));
    assert.isFalse(TypeLib.isRegExp([]));
    assert.isFalse(TypeLib.isRegExp(null));
    assert.isFalse(TypeLib.isRegExp(''));
    assert.isFalse(TypeLib.isRegExp(false));
    assert.isFalse(TypeLib.isRegExp({}));
    assert.isFalse(TypeLib.isRegExp(Symbol('test:')));
    assert.isFalse(TypeLib.isRegExp(Function.prototype));
  });

  /** @test {Type#isNotRegExp} */
  it('test: .isNotRegExp(value)', () => {
    assert.isFalse(TypeLib.isNotRegExp(/[\[\]']+/g));
    assert.isFalse(TypeLib.isNotRegExp(new RegExp()));

    assert.isTrue(TypeLib.isNotRegExp(undefined));
    assert.isTrue(TypeLib.isNotRegExp(0));
    assert.isTrue(TypeLib.isNotRegExp(-0));
    assert.isTrue(TypeLib.isNotRegExp(NaN));
    assert.isTrue(TypeLib.isNotRegExp(Infinity));
    assert.isTrue(TypeLib.isNotRegExp(-Infinity));
    assert.isTrue(TypeLib.isNotRegExp([]));
    assert.isTrue(TypeLib.isNotRegExp(null));
    assert.isTrue(TypeLib.isNotRegExp(''));
    assert.isTrue(TypeLib.isNotRegExp(false));
    assert.isTrue(TypeLib.isNotRegExp({}));
    assert.isTrue(TypeLib.isNotRegExp(Symbol('test:')));
    assert.isTrue(TypeLib.isNotRegExp(Function.prototype));
  });

  /** @test {Type#isFunction} */
  it('test: .isFunction(value)', () => {
    assert.isTrue(TypeLib.isFunction(Function.prototype));
    assert.isTrue(TypeLib.isFunction(() => { }));

    assert.isFalse(TypeLib.isFunction(/[\[\]']+/g));
    assert.isFalse(TypeLib.isFunction(new RegExp()));
    assert.isFalse(TypeLib.isFunction(undefined));
    assert.isFalse(TypeLib.isFunction(0));
    assert.isFalse(TypeLib.isFunction(-0));
    assert.isFalse(TypeLib.isFunction(NaN));
    assert.isFalse(TypeLib.isFunction(Infinity));
    assert.isFalse(TypeLib.isFunction(-Infinity));
    assert.isFalse(TypeLib.isFunction([]));
    assert.isFalse(TypeLib.isFunction(null));
    assert.isFalse(TypeLib.isFunction(''));
    assert.isFalse(TypeLib.isFunction(false));
    assert.isFalse(TypeLib.isFunction({}));
    assert.isFalse(TypeLib.isFunction(Symbol('test:')));
  });

  /** @test {Type#isNotFunction} */
  it('test: .isNotFunction(value)', () => {
    assert.isFalse(TypeLib.isNotFunction(Function.prototype));
    assert.isFalse(TypeLib.isNotFunction(() => { }));

    assert.isTrue(TypeLib.isNotFunction(/[\[\]']+/g));
    assert.isTrue(TypeLib.isNotFunction(new RegExp()));
    assert.isTrue(TypeLib.isNotFunction(undefined));
    assert.isTrue(TypeLib.isNotFunction(0));
    assert.isTrue(TypeLib.isNotFunction(-0));
    assert.isTrue(TypeLib.isNotFunction(NaN));
    assert.isTrue(TypeLib.isNotFunction(Infinity));
    assert.isTrue(TypeLib.isNotFunction(-Infinity));
    assert.isTrue(TypeLib.isNotFunction([]));
    assert.isTrue(TypeLib.isNotFunction(null));
    assert.isTrue(TypeLib.isNotFunction(''));
    assert.isTrue(TypeLib.isNotFunction(false));
    assert.isTrue(TypeLib.isNotFunction({}));
    assert.isTrue(TypeLib.isNotFunction(Symbol('test:')));
  });

  /** @test {Type#isPrimitive} */
  it('test: .isPrimitive(value)', () => {
    assert.isTrue(TypeLib.isPrimitive(0));
    assert.isTrue(TypeLib.isPrimitive(-0));
    assert.isTrue(TypeLib.isPrimitive(null));
    assert.isTrue(TypeLib.isPrimitive(''));
    assert.isTrue(TypeLib.isPrimitive(false));
    assert.isTrue(TypeLib.isPrimitive(undefined));
    assert.isTrue(TypeLib.isPrimitive(NaN));
    assert.isTrue(TypeLib.isPrimitive(Infinity));
    assert.isTrue(TypeLib.isPrimitive(-Infinity));

    assert.isFalse(TypeLib.isPrimitive(Function.prototype));
    assert.isFalse(TypeLib.isPrimitive(() => { }));
    assert.isFalse(TypeLib.isPrimitive(/[\[\]']+/g));
    assert.isFalse(TypeLib.isPrimitive(new RegExp()));
    assert.isFalse(TypeLib.isPrimitive([]));
    assert.isFalse(TypeLib.isPrimitive({}));
    assert.isFalse(TypeLib.isPrimitive(Symbol('test:')));
  });

  /** @test {Type#isNotPrimitive} */
  it('test: .isNotPrimitive(value)', () => {
    assert.isFalse(TypeLib.isNotPrimitive(0));
    assert.isFalse(TypeLib.isNotPrimitive(-0));
    assert.isFalse(TypeLib.isNotPrimitive(null));
    assert.isFalse(TypeLib.isNotPrimitive(''));
    assert.isFalse(TypeLib.isNotPrimitive(false));
    assert.isFalse(TypeLib.isNotPrimitive(undefined));
    assert.isFalse(TypeLib.isNotPrimitive(NaN));
    assert.isFalse(TypeLib.isNotPrimitive(Infinity));
    assert.isFalse(TypeLib.isNotPrimitive(-Infinity));

    assert.isTrue(TypeLib.isNotPrimitive(Function.prototype));
    assert.isTrue(TypeLib.isNotPrimitive(() => { }));
    assert.isTrue(TypeLib.isNotPrimitive(/[\[\]']+/g));
    assert.isTrue(TypeLib.isNotPrimitive(new RegExp()));
    assert.isTrue(TypeLib.isNotPrimitive([]));
    assert.isTrue(TypeLib.isNotPrimitive({}));
    assert.isTrue(TypeLib.isNotPrimitive(Symbol('test:')));
  });

  /** @test {Type#getType} */
  it('test: .getType(value)', () => {
    assert.equal(TypeLib.getType([]), TypeConstants.ARRAY);
    assert.equal(TypeLib.getType(new Array(1, 2, 3)), TypeConstants.ARRAY);

    assert.equal(TypeLib.getType(Symbol('desc')), TypeConstants.SYMBOL);

    assert.equal(TypeLib.getType(1), TypeConstants.NUMBER);
    assert.equal(TypeLib.getType(new Number(1)), TypeConstants.NUMBER);
    assert.equal(TypeLib.getType(NaN), TypeConstants.NUMBER);
    assert.equal(TypeLib.getType(Infinity), TypeConstants.NUMBER);
    assert.equal(TypeLib.getType(-Infinity), TypeConstants.NUMBER);

    assert.equal(TypeLib.getType(true), TypeConstants.BOOLEAN);
    assert.equal(TypeLib.getType(new Boolean(false)), TypeConstants.BOOLEAN);

    function Person(name) {
      this.name = name;
    }
    var person = new Person('Oleh');
    assert.equal(TypeLib.getType(person), TypeConstants.OBJECT);
    assert.equal(TypeLib.getType({}), TypeConstants.OBJECT);
    assert.equal(TypeLib.getType(new Object()), TypeConstants.OBJECT);

    assert.equal(TypeLib.getType(() => { }), TypeConstants.FUNCTION);

    assert.equal(TypeLib.getType(null), TypeConstants.NULL);
    assert.equal(TypeLib.getType(undefined), TypeConstants.UNDEFINED);

    assert.equal(TypeLib.getType(new Date()), TypeConstants.DATE);

    assert.equal(TypeLib.getType(/[\[\]']+/g), TypeConstants.REG_EXP);
    assert.equal(TypeLib.getType(new RegExp()), TypeConstants.REG_EXP);
  });

  /** @test {Type#toBe} */
  it('test: .toBe(expectation)', () => {
    let isUndefined = TypeLib.toBe(undefined)
      , isNumber3 = TypeLib.toBe(3)
      , isNaN = TypeLib.toBe(NaN)

    assert.isTrue(isUndefined(undefined));
    assert.isFalse(isUndefined({}));

    assert.isTrue(isNumber3(3));
    assert.isFalse(isNumber3(2));

    assert.isTrue(isNaN(NaN));
    assert.isFalse(isNaN(2));
  });


  /** @test {Type#notToBe} */
  it('test: .notToBe(expectation)', () => {
    let isNotUndefined = TypeLib.notToBe(undefined)
      , isNotNumber3 = TypeLib.notToBe(3)
      , isNotNaN = TypeLib.notToBe(NaN)

    assert.isFalse(isNotUndefined(undefined));
    assert.isTrue(isNotUndefined({}));

    assert.isFalse(isNotNumber3(3));
    assert.isTrue(isNotNumber3(2));

    assert.isFalse(isNotNaN(NaN));
    assert.isTrue(isNotNaN(2));
  });

  /** @test {Type#getTypeByClass} */
  it('test: .getTypeByClass(clazz)', () => {
    assert.equal(TypeLib.getTypeByClass(String), TypeConstants.STRING);
    assert.equal(TypeLib.getTypeByClass(RegExp), TypeConstants.REG_EXP);
    assert.equal(TypeLib.getTypeByClass(Object), TypeConstants.OBJECT);
    assert.equal(TypeLib.getTypeByClass(Function), TypeConstants.FUNCTION);
    assert.equal(TypeLib.getTypeByClass(Date), TypeConstants.DATE);
    assert.equal(TypeLib.getTypeByClass(Boolean), TypeConstants.BOOLEAN);
    assert.equal(TypeLib.getTypeByClass(Number), TypeConstants.NUMBER);
    assert.equal(TypeLib.getTypeByClass(Array), TypeConstants.ARRAY);
    assert.equal(TypeLib.getTypeByClass(Symbol), TypeConstants.SYMBOL);

    class Person {}
    assert.equal(TypeLib.getTypeByClass(Person), 'person')
  });

  /** @test {Type#typeCheck} */
  it('test .typeCheck(clazz, actualType) positive', () => {
    assert.isString(TypeLib.typeCheck(String, ''));
    assert.typeOf(TypeLib.typeCheck(RegExp, /ab+c/), 'regexp');
    assert.isObject(TypeLib.typeCheck(Object, {}));
    assert.isFunction(TypeLib.typeCheck(Function, () => {}));
    assert.instanceOf(TypeLib.typeCheck(Date, new Date()), Date);
    assert.isBoolean(TypeLib.typeCheck(Boolean, true));
    assert.isNumber(TypeLib.typeCheck(Number, 333));
    assert.isArray(TypeLib.typeCheck(Array, []));
    assert.typeOf(TypeLib.typeCheck(Symbol, Symbol('desc')), 'symbol');
  });

  /** @test {Type#typeCheck} */
  it('test .typeCheck(clazz, actualType) negative', () => {
    expect(() => {
      TypeLib.typeCheck(String, 777);
    }).to.throw(chai.TypeError, 'Type mismatch. Expected [string] but found [number]');
  });
});