summaryrefslogtreecommitdiff
path: root/jstests/core/bson.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/bson.js')
-rw-r--r--jstests/core/bson.js259
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");
})();