summaryrefslogtreecommitdiff
path: root/jstests/aggregation/bugs/server6125.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/bugs/server6125.js')
-rw-r--r--jstests/aggregation/bugs/server6125.js144
1 files changed, 75 insertions, 69 deletions
diff --git a/jstests/aggregation/bugs/server6125.js b/jstests/aggregation/bugs/server6125.js
index 3e8625382c5..746c191d8fe 100644
--- a/jstests/aggregation/bugs/server6125.js
+++ b/jstests/aggregation/bugs/server6125.js
@@ -1,91 +1,97 @@
//
-//testing $sort aggregation pipeline for heterogeneity (SERVER-6125)
-//method:
+// testing $sort aggregation pipeline for heterogeneity (SERVER-6125)
+// method:
// Create an array with all the different types. (Array is created with correct sort order)
// Randomise it (to prevent $sort returning types in same order).
-// Save the array members to the db.
-// aggregate($sort)
+// Save the array members to the db.
+// aggregate($sort)
// iterate through the array ensuring the _ids are in the correct order
-
-//to make results array nested (problem 2)
-function nestArray( nstArray ) {
- for( x = 0; x < nstArray.length; x++ ) {
- nstArray[x].a = { b : nstArray[x].a };
+
+// to make results array nested (problem 2)
+function nestArray(nstArray) {
+ for (x = 0; x < nstArray.length; x++) {
+ nstArray[x].a = {
+ b: nstArray[x].a
+ };
}
}
-
-//sort and run the tests
-function runSort( chkDoc, nest, problem ){
+
+// sort and run the tests
+function runSort(chkDoc, nest, problem) {
var chkArray = setupArray();
- if( nest ){ nestArray( chkArray ); }
+ if (nest) {
+ nestArray(chkArray);
+ }
Array.shuffle(chkArray);
var t = db.s6125;
t.drop();
- t.insert( chkArray );
-
- runAsserts( t.aggregate( { $sort : chkDoc } ).toArray(), problem );
+ t.insert(chkArray);
+
+ runAsserts(t.aggregate({$sort: chkDoc}).toArray(), problem);
}
-
-//actually run the tests
-function runAsserts( chkArray, problem ) {
- //check the _id at [0] to determine which way around this has been sorted
- //then check for gt / lt. Done rather than neq to preclude a < b > c issues
- if( chkArray[ 0 ]._id == 0 ) {
- for( var x=0; x<chkArray.length-1; x++ ) {
- assert.lt( chkArray[x]._id, chkArray[x + 1]._id );
+
+// actually run the tests
+function runAsserts(chkArray, problem) {
+ // check the _id at [0] to determine which way around this has been sorted
+ // then check for gt / lt. Done rather than neq to preclude a < b > c issues
+ if (chkArray[0]._id == 0) {
+ for (var x = 0; x < chkArray.length - 1; x++) {
+ assert.lt(chkArray[x]._id, chkArray[x + 1]._id);
}
- }
- else if( chkArray[ chkArray.length - 1 ]._id == 0 ) {
- for( var x=0; x<chkArray.length-1; x++ ) {
- assert.gt( chkArray[x]._id, chkArray[x + 1]._id );
+ } else if (chkArray[chkArray.length - 1]._id == 0) {
+ for (var x = 0; x < chkArray.length - 1; x++) {
+ assert.gt(chkArray[x]._id, chkArray[x + 1]._id);
}
- }
- else {
- assert.eq( true, chkArray[0]._id == 0 || chkArray[chkArray.length-1]._id == 0 );
+ } else {
+ assert.eq(true, chkArray[0]._id == 0 || chkArray[chkArray.length - 1]._id == 0);
}
}
-
-//set up data
-function setupArray(){
- return [
- { _id : 0, a : MinKey, ty : "MinKey" },
- { _id : 1, a : null, ty : "null" },
- { _id : 2, a : 1, ty : "Number" },
- { _id : 3, a : NumberLong(2), ty : "NumberLong"},
- { _id : 4, a : "3", ty : "String" },
- //Symbol not implemented in JS
- { _id : 5, a : {}, ty : "Object" },
- { _id : 6, a : new DBRef( "test.s6125", ObjectId("0102030405060708090A0B0C") ), ty : "DBRef" },
- { _id : 7, a : [ ], ty : "Empty Array" },
- { _id : 8, a : [ 1 , 2 , "a" , "B" ], ty : "Array" },
- { _id : 9, a : BinData(0, "77+9"), ty : "BinData" },
- { _id : 10, a : new ObjectId("0102030405060708090A0B0C"), ty : "ObjectId" },
- { _id : 11, a : true, ty : "Boolean" },
- { _id : 12, a : new Date( 2 ), ty : "Date" },
- { _id : 13, a : new Timestamp( 1/1000 , 1 ), ty : "Timestamp" },
- { _id : 14, a : /regex/, ty : "RegExp" },
- { _id : 15, a : new DBPointer("test.s6125",new ObjectId("0102030405060708090A0B0C")), ty : "DBPointer" },
- { _id : 16, a : function(){}, ty : "Code" },
- //Code with Scope not implemented in JS
- { _id : 17, a : MaxKey, ty : "MaxKey"}
+
+// set up data
+function setupArray() {
+ return [
+ {_id: 0, a: MinKey, ty: "MinKey"},
+ {_id: 1, a: null, ty: "null"},
+ {_id: 2, a: 1, ty: "Number"},
+ {_id: 3, a: NumberLong(2), ty: "NumberLong"},
+ {_id: 4, a: "3", ty: "String"},
+ // Symbol not implemented in JS
+ {_id: 5, a: {}, ty: "Object"},
+ {_id: 6, a: new DBRef("test.s6125", ObjectId("0102030405060708090A0B0C")), ty: "DBRef"},
+ {_id: 7, a: [], ty: "Empty Array"},
+ {_id: 8, a: [1, 2, "a", "B"], ty: "Array"},
+ {_id: 9, a: BinData(0, "77+9"), ty: "BinData"},
+ {_id: 10, a: new ObjectId("0102030405060708090A0B0C"), ty: "ObjectId"},
+ {_id: 11, a: true, ty: "Boolean"},
+ {_id: 12, a: new Date(2), ty: "Date"},
+ {_id: 13, a: new Timestamp(1 / 1000, 1), ty: "Timestamp"},
+ {_id: 14, a: /regex/, ty: "RegExp"},
+ {
+ _id: 15,
+ a: new DBPointer("test.s6125", new ObjectId("0102030405060708090A0B0C")),
+ ty: "DBPointer"
+ },
+ {_id: 16, a: function() {}, ty: "Code"},
+ // Code with Scope not implemented in JS
+ {_id: 17, a: MaxKey, ty: "MaxKey"}
];
}
//***
-//Begin testing for SERVER-6125
+// Begin testing for SERVER-6125
//***
Random.setRandomSeed();
-//problem 1, does aggregate $sort work with all types
-runSort( { a : 1 }, false, "p1" );
-
-//problem 2, does aggregate $sort work with all types nested
-runSort( { "a" : 1 }, true, "p2a" );
-runSort( { "a.b" : 1 }, true, "p2b" );
-
-//problem 3, check reverse order sort
-runSort( { a : -1 }, false, "p3" );
-
-//problem 4, reverse order sort with nested array
-runSort( { "a" : -1 }, true, "p4a" );
-runSort( { "a.b" : -1 }, true, "p4b" );
+// problem 1, does aggregate $sort work with all types
+runSort({a: 1}, false, "p1");
+
+// problem 2, does aggregate $sort work with all types nested
+runSort({"a": 1}, true, "p2a");
+runSort({"a.b": 1}, true, "p2b");
+
+// problem 3, check reverse order sort
+runSort({a: -1}, false, "p3");
+
+// problem 4, reverse order sort with nested array
+runSort({"a": -1}, true, "p4a");
+runSort({"a.b": -1}, true, "p4b");