diff options
Diffstat (limited to 'jstests/core/bson.js')
-rw-r--r-- | jstests/core/bson.js | 259 |
1 files changed, 127 insertions, 132 deletions
diff --git a/jstests/core/bson.js b/jstests/core/bson.js index 6c6d5268bbb..7139c6d3e1e 100644 --- a/jstests/core/bson.js +++ b/jstests/core/bson.js @@ -3,136 +3,131 @@ */ (function() { - 'use strict'; - - var t = db.getCollection("bson"); - t.drop(); - function testObjectsAreEqual(obj1, obj2, equalityFunc, func_name) { - var assert_msg = func_name + " " + tojson(obj1) + " " + tojson(obj2); - assert(equalityFunc(obj1, obj2), assert_msg); - } - - function testObjectsAreNotEqual(obj1, obj2, equalityFunc, func_name) { - var assert_msg = func_name + " " + tojson(obj1) + " " + tojson(obj2); - assert(!equalityFunc(obj1, obj2), assert_msg); - } - - function runTests(func, testFunc) { - // Tests on numbers. - testObjectsAreEqual(0, 0, func, testFunc); - testObjectsAreEqual(-5, -5, func, testFunc); - testObjectsAreEqual(1.1, 1.1, func, testFunc); - testObjectsAreEqual(1, 1, func, testFunc); - testObjectsAreEqual(1.1, 1.10, func, testFunc); - var nl0 = new NumberLong("18014398509481984"); - var nl1 = new NumberLong("18014398509481985"); - testObjectsAreEqual(nl0, nl0, func, testFunc); - testObjectsAreNotEqual(nl0, nl1, func, testFunc); - - // Test on key name. - t.insertMany([{a: 0}, {A: 0}]); - testObjectsAreNotEqual(t.findOne({a: 0}), t.findOne({A: 0}), func, testFunc); - - // Tests on strings. - testObjectsAreEqual("abc", "abc", func, testFunc); - testObjectsAreNotEqual("abc", "aBc", func, testFunc); - - // Tests on boolean. - testObjectsAreEqual(true, true, func, testFunc); - testObjectsAreNotEqual(true, false, func, testFunc); - testObjectsAreEqual(false, false, func, testFunc); - - // Tests on date & timestamp. - var d0 = new Date(0); - var d1 = new Date(1); - var ts0 = new Timestamp(0, 1); - var ts1 = new Timestamp(1, 1); - testObjectsAreEqual(d0, d0, func, testFunc); - testObjectsAreNotEqual(d0, d1, func, testFunc); - testObjectsAreNotEqual(d1, ts1, func, testFunc); - testObjectsAreEqual(ts0, ts0, func, testFunc); - testObjectsAreNotEqual(ts0, ts1, func, testFunc); - - // Tests on regex. - testObjectsAreEqual(/3/, /3/, func, testFunc); - testObjectsAreNotEqual(/3/, /3/i, func, testFunc); - - // Tests on DBPointer. - var dbp0 = new DBPointer("test", new ObjectId()); - var dbp1 = new DBPointer("test", new ObjectId()); - testObjectsAreEqual(dbp0, dbp0, func, testFunc); - testObjectsAreNotEqual(dbp0, dbp1, func, testFunc); - - // Tests on JavaScript. - var js0 = Function.prototype; - var js1 = function() {}; - testObjectsAreEqual(js0, Function.prototype, func, testFunc); - testObjectsAreNotEqual(js0, js1, func, testFunc); - - // Tests on arrays. - testObjectsAreEqual([0, 1], [0, 1], func, testFunc); - testObjectsAreNotEqual([0, 1], [0], func, testFunc); - testObjectsAreNotEqual([1, 0], [0, 1], func, testFunc); - - // Tests on BinData & HexData. - testObjectsAreEqual(new BinData(0, "JANgqwetkqwklEWRbWERKKJREtbq"), - new BinData(0, "JANgqwetkqwklEWRbWERKKJREtbq"), - func, - testFunc); - testObjectsAreEqual(new BinData(0, "AAaa"), new BinData(0, "AAaa"), func, testFunc); - testObjectsAreNotEqual(new BinData(0, "AAaa"), new BinData(0, "aaAA"), func, testFunc); - - testObjectsAreEqual(new HexData(0, "AAaa"), new HexData(0, "AAaa"), func, testFunc); - testObjectsAreEqual(new HexData(0, "AAaa"), new HexData(0, "aaAA"), func, testFunc); - testObjectsAreNotEqual(new HexData(0, "AAaa"), new BinData(0, "AAaa"), func, testFunc); - - // Tests on ObjectId - testObjectsAreEqual(new ObjectId("57d1b31cd311a43091fe592f"), - new ObjectId("57d1b31cd311a43091fe592f"), - func, - testFunc); - testObjectsAreNotEqual(new ObjectId("57d1b31cd311a43091fe592f"), - new ObjectId("57d1b31ed311a43091fe5930"), - func, - testFunc); - - // Tests on miscellaneous types. - testObjectsAreEqual(NaN, NaN, func, testFunc); - testObjectsAreEqual(null, null, func, testFunc); - testObjectsAreNotEqual(null, -null, func, testFunc); - testObjectsAreEqual(MinKey, MinKey, func, testFunc); - testObjectsAreEqual(MaxKey, MaxKey, func, testFunc); - testObjectsAreNotEqual(MinKey, MaxKey, func, testFunc); - - // Test on object ordering. - testObjectsAreNotEqual({a: 1, b: 2}, {b: 2, a: 1}, func, testFunc); - } - - // Create wrapper function for bsonWoCompare, such that it returns boolean result. - var bsonWoCompareWrapper = function(obj1, obj2) { - return bsonWoCompare(obj1, obj2) === 0; - }; - - // Run the tests which work the same for both comparators. - runTests(bsonWoCompareWrapper, "bsonWoCompare"); - runTests(bsonBinaryEqual, "bsonBinaryEqual"); - - // Run the tests which differ between comparators. - testObjectsAreEqual(NaN, -NaN, bsonWoCompareWrapper, "bsonWoCompare"); - testObjectsAreNotEqual(NaN, -NaN, bsonBinaryEqual, "bsonBinaryEqual"); - testObjectsAreEqual(1, NumberLong("1"), bsonWoCompareWrapper, "bsonWoCompare"); - testObjectsAreNotEqual(1, NumberLong("1"), bsonBinaryEqual, "bsonBinaryEqual"); - testObjectsAreEqual(1.0, NumberLong("1"), bsonWoCompareWrapper, "bsonWoCompare"); - testObjectsAreNotEqual(1.0, NumberLong("1"), bsonBinaryEqual, "bsonBinaryEqual"); - testObjectsAreEqual(NumberInt("1"), NumberLong("1"), bsonWoCompareWrapper, "bsonWoCompare"); - testObjectsAreNotEqual(NumberInt("1"), NumberLong("1"), bsonBinaryEqual, "bsonBinaryEqual"); - testObjectsAreEqual( - NumberInt("1"), NumberDecimal("1.0"), bsonWoCompareWrapper, "bsonWoCompare"); - testObjectsAreNotEqual( - NumberInt("1"), NumberDecimal("1.0"), bsonBinaryEqual, "bsonBinaryEqual"); - testObjectsAreEqual( - NumberLong("1"), NumberDecimal("1.0"), bsonWoCompareWrapper, "bsonWoCompare"); - testObjectsAreNotEqual( - NumberLong("1"), NumberDecimal("1.0"), bsonBinaryEqual, "bsonBinaryEqual"); - +'use strict'; + +var t = db.getCollection("bson"); +t.drop(); +function testObjectsAreEqual(obj1, obj2, equalityFunc, func_name) { + var assert_msg = func_name + " " + tojson(obj1) + " " + tojson(obj2); + assert(equalityFunc(obj1, obj2), assert_msg); +} + +function testObjectsAreNotEqual(obj1, obj2, equalityFunc, func_name) { + var assert_msg = func_name + " " + tojson(obj1) + " " + tojson(obj2); + assert(!equalityFunc(obj1, obj2), assert_msg); +} + +function runTests(func, testFunc) { + // Tests on numbers. + testObjectsAreEqual(0, 0, func, testFunc); + testObjectsAreEqual(-5, -5, func, testFunc); + testObjectsAreEqual(1.1, 1.1, func, testFunc); + testObjectsAreEqual(1, 1, func, testFunc); + testObjectsAreEqual(1.1, 1.10, func, testFunc); + var nl0 = new NumberLong("18014398509481984"); + var nl1 = new NumberLong("18014398509481985"); + testObjectsAreEqual(nl0, nl0, func, testFunc); + testObjectsAreNotEqual(nl0, nl1, func, testFunc); + + // Test on key name. + t.insertMany([{a: 0}, {A: 0}]); + testObjectsAreNotEqual(t.findOne({a: 0}), t.findOne({A: 0}), func, testFunc); + + // Tests on strings. + testObjectsAreEqual("abc", "abc", func, testFunc); + testObjectsAreNotEqual("abc", "aBc", func, testFunc); + + // Tests on boolean. + testObjectsAreEqual(true, true, func, testFunc); + testObjectsAreNotEqual(true, false, func, testFunc); + testObjectsAreEqual(false, false, func, testFunc); + + // Tests on date & timestamp. + var d0 = new Date(0); + var d1 = new Date(1); + var ts0 = new Timestamp(0, 1); + var ts1 = new Timestamp(1, 1); + testObjectsAreEqual(d0, d0, func, testFunc); + testObjectsAreNotEqual(d0, d1, func, testFunc); + testObjectsAreNotEqual(d1, ts1, func, testFunc); + testObjectsAreEqual(ts0, ts0, func, testFunc); + testObjectsAreNotEqual(ts0, ts1, func, testFunc); + + // Tests on regex. + testObjectsAreEqual(/3/, /3/, func, testFunc); + testObjectsAreNotEqual(/3/, /3/i, func, testFunc); + + // Tests on DBPointer. + var dbp0 = new DBPointer("test", new ObjectId()); + var dbp1 = new DBPointer("test", new ObjectId()); + testObjectsAreEqual(dbp0, dbp0, func, testFunc); + testObjectsAreNotEqual(dbp0, dbp1, func, testFunc); + + // Tests on JavaScript. + var js0 = Function.prototype; + var js1 = function() {}; + testObjectsAreEqual(js0, Function.prototype, func, testFunc); + testObjectsAreNotEqual(js0, js1, func, testFunc); + + // Tests on arrays. + testObjectsAreEqual([0, 1], [0, 1], func, testFunc); + testObjectsAreNotEqual([0, 1], [0], func, testFunc); + testObjectsAreNotEqual([1, 0], [0, 1], func, testFunc); + + // Tests on BinData & HexData. + testObjectsAreEqual(new BinData(0, "JANgqwetkqwklEWRbWERKKJREtbq"), + new BinData(0, "JANgqwetkqwklEWRbWERKKJREtbq"), + func, + testFunc); + testObjectsAreEqual(new BinData(0, "AAaa"), new BinData(0, "AAaa"), func, testFunc); + testObjectsAreNotEqual(new BinData(0, "AAaa"), new BinData(0, "aaAA"), func, testFunc); + + testObjectsAreEqual(new HexData(0, "AAaa"), new HexData(0, "AAaa"), func, testFunc); + testObjectsAreEqual(new HexData(0, "AAaa"), new HexData(0, "aaAA"), func, testFunc); + testObjectsAreNotEqual(new HexData(0, "AAaa"), new BinData(0, "AAaa"), func, testFunc); + + // Tests on ObjectId + testObjectsAreEqual(new ObjectId("57d1b31cd311a43091fe592f"), + new ObjectId("57d1b31cd311a43091fe592f"), + func, + testFunc); + testObjectsAreNotEqual(new ObjectId("57d1b31cd311a43091fe592f"), + new ObjectId("57d1b31ed311a43091fe5930"), + func, + testFunc); + + // Tests on miscellaneous types. + testObjectsAreEqual(NaN, NaN, func, testFunc); + testObjectsAreEqual(null, null, func, testFunc); + testObjectsAreNotEqual(null, -null, func, testFunc); + testObjectsAreEqual(MinKey, MinKey, func, testFunc); + testObjectsAreEqual(MaxKey, MaxKey, func, testFunc); + testObjectsAreNotEqual(MinKey, MaxKey, func, testFunc); + + // Test on object ordering. + testObjectsAreNotEqual({a: 1, b: 2}, {b: 2, a: 1}, func, testFunc); +} + +// Create wrapper function for bsonWoCompare, such that it returns boolean result. +var bsonWoCompareWrapper = function(obj1, obj2) { + return bsonWoCompare(obj1, obj2) === 0; +}; + +// Run the tests which work the same for both comparators. +runTests(bsonWoCompareWrapper, "bsonWoCompare"); +runTests(bsonBinaryEqual, "bsonBinaryEqual"); + +// Run the tests which differ between comparators. +testObjectsAreEqual(NaN, -NaN, bsonWoCompareWrapper, "bsonWoCompare"); +testObjectsAreNotEqual(NaN, -NaN, bsonBinaryEqual, "bsonBinaryEqual"); +testObjectsAreEqual(1, NumberLong("1"), bsonWoCompareWrapper, "bsonWoCompare"); +testObjectsAreNotEqual(1, NumberLong("1"), bsonBinaryEqual, "bsonBinaryEqual"); +testObjectsAreEqual(1.0, NumberLong("1"), bsonWoCompareWrapper, "bsonWoCompare"); +testObjectsAreNotEqual(1.0, NumberLong("1"), bsonBinaryEqual, "bsonBinaryEqual"); +testObjectsAreEqual(NumberInt("1"), NumberLong("1"), bsonWoCompareWrapper, "bsonWoCompare"); +testObjectsAreNotEqual(NumberInt("1"), NumberLong("1"), bsonBinaryEqual, "bsonBinaryEqual"); +testObjectsAreEqual(NumberInt("1"), NumberDecimal("1.0"), bsonWoCompareWrapper, "bsonWoCompare"); +testObjectsAreNotEqual(NumberInt("1"), NumberDecimal("1.0"), bsonBinaryEqual, "bsonBinaryEqual"); +testObjectsAreEqual(NumberLong("1"), NumberDecimal("1.0"), bsonWoCompareWrapper, "bsonWoCompare"); +testObjectsAreNotEqual(NumberLong("1"), NumberDecimal("1.0"), bsonBinaryEqual, "bsonBinaryEqual"); })(); |