function equalsNull(o) {
    return o == null;
}

noInline(equalsNull);

function notEqualsNull(o) {
    return o != null;
}

noInline(notEqualsNull);

function strictEqualsNull(o) {
    return o === null;
}

noInline(strictEqualsNull);

function strictNotEqualsNull(o) {
    return o !== null;
}

noInline(strictNotEqualsNull);

function equalsUndefined(o) {
    return o == void 0;
}

noInline(equalsUndefined);

function notEqualsUndefined(o) {
    return o != void 0;
}

noInline(notEqualsUndefined);

function strictEqualsUndefined(o) {
    return o === void 0;
}

noInline(strictEqualsUndefined);

function strictNotEqualsUndefined(o) {
    return o !== void 0;
}

noInline(strictNotEqualsNull);

function isFalsey(o) {
    return !o;
}

noInline(isFalsey);

function test(func, iteration, object, outcome) {
    var result = func(object);
    if (result != outcome)
        throw new Error("Bad result: " + result + " on iteration " + iteration);
}

for (var i = 0; i < 10000; ++i) {
    test(equalsNull, i, null, true);
    test(equalsNull, i, undefined, true);
    test(equalsNull, i, void 0, true);
    test(equalsNull, i, {}, false);
    test(equalsNull, i, makeMasquerader(), true);
}

for (var i = 0; i < 10000; ++i) {
    test(notEqualsNull, i, null, false);
    test(notEqualsNull, i, undefined, false);
    test(notEqualsNull, i, void 0, false);
    test(notEqualsNull, i, {}, true);
    test(notEqualsNull, i, makeMasquerader(), false);
}

for (var i = 0; i < 10000; ++i) {
    test(strictEqualsNull, i, null, true);
    test(strictEqualsNull, i, undefined, false);
    test(strictEqualsNull, i, void 0, false);
    test(strictEqualsNull, i, {}, false);
    test(strictEqualsNull, i, makeMasquerader(), false);
}

for (var i = 0; i < 10000; ++i) {
    test(strictNotEqualsNull, i, null, false);
    test(strictNotEqualsNull, i, undefined, true);
    test(strictNotEqualsNull, i, void 0, true);
    test(strictNotEqualsNull, i, {}, true);
    test(strictNotEqualsNull, i, makeMasquerader(), true);
}

for (var i = 0; i < 10000; ++i) {
    test(equalsUndefined, i, null, true);
    test(equalsUndefined, i, undefined, true);
    test(equalsUndefined, i, void 0, true);
    test(equalsUndefined, i, {}, false);
    test(equalsUndefined, i, makeMasquerader(), true);
}

for (var i = 0; i < 10000; ++i) {
    test(notEqualsUndefined, i, null, false);
    test(notEqualsUndefined, i, undefined, false);
    test(notEqualsUndefined, i, void 0, false);
    test(notEqualsUndefined, i, {}, true);
    test(notEqualsUndefined, i, makeMasquerader(), false);
}

for (var i = 0; i < 10000; ++i) {
    test(strictEqualsUndefined, i, null, false);
    test(strictEqualsUndefined, i, undefined, true);
    test(strictEqualsUndefined, i, void 0, true);
    test(strictEqualsUndefined, i, {}, false);
    test(strictEqualsUndefined, i, makeMasquerader(), false);
}

for (var i = 0; i < 10000; ++i) {
    test(strictNotEqualsUndefined, i, null, true);
    test(strictNotEqualsUndefined, i, undefined, false);
    test(strictNotEqualsUndefined, i, void 0, false);
    test(strictNotEqualsUndefined, i, {}, true);
    test(strictNotEqualsUndefined, i, makeMasquerader(), true);
}

for (var i = 0; i < 10000; ++i) {
    test(isFalsey, i, null, true);
    test(isFalsey, i, undefined, true);
    test(isFalsey, i, void 0, true);
    test(isFalsey, i, {}, false);
    test(isFalsey, i, makeMasquerader(), true);
}
