mongo/jstests/aggregation/expressions/arith_overflow.js
Zac 591928c619 SERVER-108478 JS formatted by prettier and remove clang-format (#39656)
GitOrigin-RevId: 6c8f6aded47f260aa4f7c231b17dae3302cb1e04
2025-08-21 17:27:09 +00:00

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]);