mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 01:21:03 +01:00
67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
// Aggregation $strcasecmp tests.
|
|
|
|
t = db.jstests_aggregation_strcasecmp;
|
|
t.drop();
|
|
|
|
t.save({});
|
|
|
|
function cmp(a, b) {
|
|
return t.aggregate({$project: {a: {$cmp: [a, b]}}}).toArray()[0].a;
|
|
}
|
|
|
|
function strcasecmp(a, b) {
|
|
return t.aggregate({$project: {a: {$strcasecmp: [a, b]}}}).toArray()[0].a;
|
|
}
|
|
|
|
function assertException(args) {
|
|
assert.commandFailed(
|
|
t.runCommand('aggregate', {pipeline: [{$project: {a: {$strcasecmp: args}}}]}));
|
|
}
|
|
|
|
function assertStrcasecmp(expected, a, b) {
|
|
assert.eq(expected, strcasecmp(a, b));
|
|
assert.eq(-expected, strcasecmp(b, a));
|
|
}
|
|
|
|
function assertBoth(expectedStrcasecmp, expectedCmp, a, b) {
|
|
assertStrcasecmp(expectedStrcasecmp, a, b);
|
|
assert.eq(expectedCmp, cmp(a, b));
|
|
assert.eq(-expectedCmp, cmp(b, a));
|
|
}
|
|
|
|
// Wrong number of arguments.
|
|
assertException([]);
|
|
assertException(['a']);
|
|
assertException(['a', 'b', 'c']);
|
|
|
|
// Basic tests.
|
|
assertBoth(0, 0, '', '');
|
|
assertBoth(-1, -1, '', 'a');
|
|
assertBoth(0, -1, 'A', 'a');
|
|
assertBoth(1, -1, 'Ab', 'a');
|
|
assertBoth(0, -1, 'Ab', 'aB');
|
|
assertBoth(1, -1, 'Bb', 'aB');
|
|
assertBoth(-1, -1, 'Bb', 'cB');
|
|
assertBoth(1, -1, 'aB', 'aa');
|
|
assertBoth(-1, -1, 'aB', 'ac');
|
|
|
|
// With non alphabet characters.
|
|
assertBoth(0, -1, 'A$_b1C?', 'a$_b1C?');
|
|
assertBoth(1, -1, 'ABC01234', 'abc0123');
|
|
|
|
// String coercion.
|
|
assertStrcasecmp(0, '1', 1);
|
|
assertStrcasecmp(0, '1.23', 1.23);
|
|
assertStrcasecmp(0, '1970-01-01T00:00:00.000Z', new Date(0));
|
|
assertStrcasecmp(0, '1970-01-01t00:00:00.000Z', new Date(0));
|
|
assertException(['abc', /abc/]);
|
|
|
|
// Extended characters.
|
|
assertBoth(0, -1, '\u0080D\u20ac', '\u0080d\u20ac');
|
|
assertBoth(1, 1, 'ó', 'Ó'); // Not treated as equal currently.
|
|
|
|
// String from field path.
|
|
t.drop();
|
|
t.save({x: 'abc'});
|
|
assertBoth(0, 1, '$x', 'ABC');
|