diff options
Diffstat (limited to 'jstests/aggregation/bugs/server6125.js')
-rw-r--r-- | jstests/aggregation/bugs/server6125.js | 144 |
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"); |