mongo/jstests/aggregation/exec/value_coerce_to_bool.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

44 lines
1.1 KiB
JavaScript

// Value::coerceToBool() is consistent with BSONElement::trueValue(). SERVER-6120
const t = db[jsTestName()];
t.drop();
assert.commandWorked(t.insertOne({object: {a: 1}}));
function coerceToBool(value) {
return t.aggregate({$project: {boolValue: {$and: [value]}}}).toArray()[0].boolValue;
}
function assertBoolValue(expectedBool, value) {
assert.eq(expectedBool, coerceToBool(value));
}
// Bool type.
assertBoolValue(false, false);
assertBoolValue(true, true);
// Numeric types.
assertBoolValue(false, NumberLong(0));
assertBoolValue(true, NumberLong(1));
assertBoolValue(false, NumberInt(0));
assertBoolValue(true, NumberInt(1));
assertBoolValue(false, 0.0);
assertBoolValue(true, 1.0);
// Always false types.
assertBoolValue(false, null);
// Always true types.
assertBoolValue(true, "");
assertBoolValue(true, "a");
assertBoolValue(true, "$object");
assertBoolValue(true, []);
assertBoolValue(true, [1]);
assertBoolValue(true, new ObjectId());
assertBoolValue(true, new Date());
assertBoolValue(true, /a/);
assertBoolValue(true, new Timestamp());
// Missing field.
assertBoolValue(false, "$missingField");