mirror of https://github.com/mongodb/mongo
28 lines
990 B
JavaScript
28 lines
990 B
JavaScript
// Tests for $add, $subtract and $multiply aggregation expression type promotion on overflow
|
|
// @tags: [require_fcv_71]
|
|
const coll = db.arith_overflow;
|
|
|
|
function runTest(operator, expectedResults) {
|
|
const result = coll
|
|
.aggregate([{$project: {res: {[operator]: ["$lhs", "$rhs"]}}}, {$sort: {_id: 1}}])
|
|
.toArray()
|
|
.map((r) => r.res);
|
|
assert.eq(result, expectedResults);
|
|
}
|
|
|
|
// $add
|
|
coll.drop();
|
|
assert.commandWorked(coll.insert({_id: 0, lhs: NumberInt(2e9), rhs: NumberInt(2e9)}));
|
|
assert.commandWorked(coll.insert({_id: 1, lhs: NumberLong(9e18), rhs: NumberLong(9e18)}));
|
|
|
|
runTest("$add", [NumberLong(4e9), 1.8e19]);
|
|
|
|
// $subtract
|
|
coll.drop();
|
|
assert.commandWorked(coll.insert({_id: 0, lhs: NumberInt(2e9), rhs: NumberInt(-2e9)}));
|
|
assert.commandWorked(coll.insert({_id: 1, lhs: NumberLong(9e18), rhs: NumberLong(-9e18)}));
|
|
|
|
runTest("$subtract", [NumberLong(4e9), 1.8e19]);
|
|
// $multiply uses same arguments
|
|
runTest("$multiply", [NumberLong(-4e18), -8.1e37]);
|