/*===
number -Infinity nonzero
number -1000000000 nonzero
number -123 nonzero
number -1 nonzero
number 0 -Infinity
number 0 Infinity
number 1 nonzero
number 123 nonzero
number 1000000000 nonzero
number Infinity nonzero
number NaN nonzero
true
false
===*/

function basicTest() {
    var obj;

    function test(x) {
        var obj;
        var t;

        try {
            obj = new Number(x);
            t = obj.valueOf();
            print(typeof t, t, (t === 0 ? (1 / t) : 'nonzero'));
        } catch (e) {
            print(e.name);
        }
    }

    test(Number.NEGATIVE_INFINITY);
    test(-1e9);
    test(-123);
    test(-1);
    test(-0);
    test(+0);
    test(1);
    test(123);
    test(1e9);
    test(Number.POSITIVE_INFINITY);
    test(Number.NaN);

    // valueOf() returns a plain number

    obj = new Number(123.456789012345678901234567890);
    print(obj.valueOf() == obj);  // true
    print(obj.valueOf() === obj);  // false, number vs. object
}

try {
    basicTest();
} catch (e) {
    print(e);
}

