diff options
author | Charlie Swanson <charlie.swanson@mongodb.com> | 2019-05-31 12:39:16 -0400 |
---|---|---|
committer | Charlie Swanson <charlie.swanson@mongodb.com> | 2019-05-31 15:55:17 -0400 |
commit | 160dbb352cae76307016f42934902d74e7879e5a (patch) | |
tree | ae9db9ba51e4557a92ebefa0f63e01e3d1e13a29 | |
parent | 3c408fe353aef12c427eced6bd2129be4435eb6c (diff) | |
download | mongo-160dbb352cae76307016f42934902d74e7879e5a.tar.gz |
SERVER-41428 Robustify update_min_max_examples.js
-rw-r--r-- | jstests/core/update_min_max_examples.js | 118 |
1 files changed, 62 insertions, 56 deletions
diff --git a/jstests/core/update_min_max_examples.js b/jstests/core/update_min_max_examples.js index 7bcb6197f93..62e870147bf 100644 --- a/jstests/core/update_min_max_examples.js +++ b/jstests/core/update_min_max_examples.js @@ -1,65 +1,71 @@ // Basic examples for $min/$max -var res; -var coll = db.update_min_max; -coll.drop(); +(function() { + "use strict"; -// $min for number -coll.insert({_id: 1, a: 2}); -res = coll.update({_id: 1}, {$min: {a: 1}}); -assert.writeOK(res); -assert.eq(coll.findOne({_id: 1}).a, 1); + let res; + const coll = db.update_min_max; + coll.drop(); -// $max for number -coll.insert({_id: 2, a: 2}); -res = coll.update({_id: 2}, {$max: {a: 1}}); -assert.writeOK(res); -assert.eq(coll.findOne({_id: 2}).a, 2); + // $min for number + coll.insert({_id: 1, a: 2}); + res = coll.update({_id: 1}, {$min: {a: 1}}); + assert.writeOK(res); + assert.eq(coll.findOne({_id: 1}).a, 1); -// $min for Date -coll.insert({_id: 3, a: new Date()}); -var origDoc = coll.findOne({_id: 3}); -sleep(2); -res = coll.update({_id: 3}, {$min: {a: new Date()}}); -assert.writeOK(res); -assert.eq(coll.findOne({_id: 3}).a, origDoc.a); + // $max for number + coll.insert({_id: 2, a: 2}); + res = coll.update({_id: 2}, {$max: {a: 1}}); + assert.writeOK(res); + assert.eq(coll.findOne({_id: 2}).a, 2); -// $max for Date -coll.insert({_id: 4, a: new Date()}); -sleep(2); -var newDate = new Date(); -res = coll.update({_id: 4}, {$max: {a: newDate}}); -assert.writeOK(res); -assert.eq(coll.findOne({_id: 4}).a, newDate); + // $min for Date + let date = new Date(); + coll.insert({_id: 3, a: date}); + // setMilliseconds() will roll over to change seconds if necessary. + date.setMilliseconds(date.getMilliseconds() + 2); + // Test that we have advanced the date and it's no longer the same as the one we inserted. + assert.eq(null, coll.findOne({_id: 3, a: date})); + const origDoc = coll.findOne({_id: 3}); + assert.commandWorked(coll.update({_id: 3}, {$min: {a: date}})); + assert.eq(coll.findOne({_id: 3}).a, origDoc.a); -// $max for small number -coll.insert({_id: 5, a: 1e-15}); -// Slightly bigger than 1e-15. -var biggerval = 0.000000000000001000000000000001; -res = coll.update({_id: 5}, {$max: {a: biggerval}}); -assert.writeOK(res); -assert.eq(coll.findOne({_id: 5}).a, biggerval); + // $max for Date + coll.insert({_id: 4, a: date}); + // setMilliseconds() will roll over to change seconds if necessary. + date.setMilliseconds(date.getMilliseconds() + 2); + // Test that we have advanced the date and it's no longer the same as the one we inserted. + assert.eq(null, coll.findOne({_id: 4, a: date})); + res = coll.update({_id: 4}, {$max: {a: date}}); + assert.writeOK(res); + assert.eq(coll.findOne({_id: 4}).a, date); -// $min for a small number -coll.insert({_id: 6, a: biggerval}); -res = coll.update({_id: 6}, {$min: {a: 1e-15}}); -assert.writeOK(res); -assert.eq(coll.findOne({_id: 6}).a, 1e-15); + // $max for small number + coll.insert({_id: 5, a: 1e-15}); + // Slightly bigger than 1e-15. + const biggerval = 0.000000000000001000000000000001; + res = coll.update({_id: 5}, {$max: {a: biggerval}}); + assert.writeOK(res); + assert.eq(coll.findOne({_id: 5}).a, biggerval); -// $max with positional operator -var insertdoc = {_id: 7, y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}]}; -coll.insert(insertdoc); -res = coll.update({_id: 7, "y.a": 6}, {$max: {"y.$.a": 7}}); -assert.writeOK(res); -insertdoc.y[1].a = 7; -assert.docEq(coll.findOne({_id: 7}), insertdoc); + // $min for a small number + coll.insert({_id: 6, a: biggerval}); + res = coll.update({_id: 6}, {$min: {a: 1e-15}}); + assert.writeOK(res); + assert.eq(coll.findOne({_id: 6}).a, 1e-15); -// $min with positional operator -insertdoc = { - _id: 8, - y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}] -}; -coll.insert(insertdoc); -res = coll.update({_id: 8, "y.a": 6}, {$min: {"y.$.a": 5}}); -assert.writeOK(res); -insertdoc.y[1].a = 5; -assert.docEq(coll.findOne({_id: 8}), insertdoc); + // $max with positional operator + let insertdoc = {_id: 7, y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}]}; + coll.insert(insertdoc); + res = coll.update({_id: 7, "y.a": 6}, {$max: {"y.$.a": 7}}); + assert.writeOK(res); + insertdoc.y[1].a = 7; + assert.docEq(coll.findOne({_id: 7}), insertdoc); + + // $min with positional operator + insertdoc = {_id: 8, y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}]}; + coll.insert(insertdoc); + res = coll.update({_id: 8, "y.a": 6}, {$min: {"y.$.a": 5}}); + assert.writeOK(res); + insertdoc.y[1].a = 5; + assert.docEq(coll.findOne({_id: 8}), insertdoc); +}()); |