summaryrefslogtreecommitdiff
path: root/jstests/aggregation/bugs/server6120.js
blob: cd2cf7bc25c9394cd7459a67ab83b02d3ad898ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Value::coerceToBool() is consistent with BSONElement::trueValue().  SERVER-6120

t = db.jstests_aggregation_server6120;
t.drop();

t.save( {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' );