assert.eq.automsg("0", "new NumberInt()"); n = new NumberInt(4); assert.eq.automsg("4", "n"); assert.eq.automsg("4", "n.toNumber()"); assert.eq.automsg("8", "n + 4"); assert.eq.automsg("'NumberInt(4)'", "n.toString()"); assert.eq.automsg("'NumberInt(4)'", "tojson( n )"); a = {}; a.a = n; p = tojson(a); assert.eq.automsg("'{ \"a\" : NumberInt(4) }'", "p"); assert.eq.automsg("NumberInt(4 )", "eval( tojson( NumberInt( 4 ) ) )"); assert.eq.automsg("a", "eval( tojson( a ) )"); n = new NumberInt(-4); assert.eq.automsg("-4", "n"); assert.eq.automsg("-4", "n.toNumber()"); assert.eq.automsg("0", "n + 4"); assert.eq.automsg("'NumberInt(-4)'", "n.toString()"); assert.eq.automsg("'NumberInt(-4)'", "tojson( n )"); a = {}; a.a = n; p = tojson(a); assert.eq.automsg("'{ \"a\" : NumberInt(-4) }'", "p"); n = new NumberInt("11111"); assert.eq.automsg("'NumberInt(11111)'", "n.toString()"); assert.eq.automsg("'NumberInt(11111)'", "tojson( n )"); a = {}; a.a = n; p = tojson(a); assert.eq.automsg("'{ \"a\" : NumberInt(11111) }'", "p"); assert.eq.automsg("NumberInt('11111' )", "eval( tojson( NumberInt( '11111' ) ) )"); assert.eq.automsg("a", "eval( tojson( a ) )"); n = new NumberInt("-11111"); assert.eq.automsg("-11111", "n.toNumber()"); assert.eq.automsg("-11107", "n + 4"); assert.eq.automsg("'NumberInt(-11111)'", "n.toString()"); assert.eq.automsg("'NumberInt(-11111)'", "tojson( n )"); a = {}; a.a = n; p = tojson(a); assert.eq.automsg("'{ \"a\" : NumberInt(-11111) }'", "p"); // parsing: SpiderMonkey evaluates non-numeric strings as 0, which is not bad // assert.throws.automsg( function() { new NumberInt( "" ); } ); // assert.throws.automsg( function() { new NumberInt( "y" ); } ); // eq assert.eq({x: 5}, {x: new NumberInt("5")}); assert(5 == NumberInt(5), "eq"); assert(5 < NumberInt(6), "lt"); assert(5 > NumberInt(4), "lt"); assert(NumberInt(1), "to bool a"); // objects are always considered thruthy // assert( ! NumberInt( 0 ) , "to bool b" ); // create doc with int value in db t = db.getCollection("numberint"); t.drop(); o = { a: NumberInt(42) }; t.save(o); assert.eq(42, t.findOne().a, "save doc 1"); assert.eq(1, t.find({a: {$type: 16}}).count(), "save doc 2"); assert.eq(0, t.find({a: {$type: 1}}).count(), "save doc 3"); // roundtripping mod = t.findOne({a: 42}); mod.a += 10; mod.b = "foo"; delete mod._id; t.save(mod); assert.eq(2, t.find({a: {$type: 16}}).count(), "roundtrip 1"); assert.eq(0, t.find({a: {$type: 1}}).count(), "roundtrip 2"); assert.eq(1, t.find({a: 52}).count(), "roundtrip 3"); // save regular number t.save({a: 42}); assert.eq(2, t.find({a: {$type: 16}}).count(), "normal 1"); assert.eq(1, t.find({a: {$type: 1}}).count(), "normal 2"); assert.eq(2, t.find({a: 42}).count(), "normal 3");