76 lines
2.3 KiB
JavaScript
76 lines
2.3 KiB
JavaScript
/**
|
|
* $densify tests with full range without partitions.
|
|
* @tags: [
|
|
* # Needed as $densify is a 51 feature.
|
|
* requires_fcv_51,
|
|
* ]
|
|
*/
|
|
|
|
load("jstests/aggregation/sources/densify/libs/densify_in_js.js");
|
|
|
|
(function() {
|
|
"use strict";
|
|
const collName = jsTestName();
|
|
const coll = db.getCollection(collName);
|
|
coll.drop();
|
|
|
|
// Run all tests for each date unit and on numeric values.
|
|
for (let i = 0; i < densifyUnits.length; i++) {
|
|
const unit = densifyUnits[i];
|
|
coll.drop();
|
|
const base = unit ? new ISODate("2021-01-01") : 0;
|
|
const {add} = getArithmeticFunctionsForUnit(unit);
|
|
|
|
// Run all tests for different step values.
|
|
for (let i = 0; i < interestingSteps.length; i++) {
|
|
const step = interestingSteps[i];
|
|
const runDensifyFullTest = (msg) =>
|
|
testDensifyStage({field: "val", range: {step, bounds: "full", unit: unit}}, coll, msg);
|
|
|
|
// Fill in docs between 1 and 99.
|
|
coll.drop();
|
|
coll.insert({val: base});
|
|
coll.insert({val: add(base, 99)});
|
|
runDensifyFullTest();
|
|
|
|
// Negative numbers and dates before the epoch.
|
|
coll.drop();
|
|
insertDocumentsOnStep({base, min: -100, max: -1, step: 2, addFunc: add, coll: coll});
|
|
runDensifyFullTest();
|
|
|
|
// Lots of off-step documents.
|
|
coll.drop();
|
|
insertDocumentsOnPredicate(
|
|
{base, min: 0, max: 50, pred: i => i % 3 == 0 || i % 7 == 0, addFunc: add, coll: coll});
|
|
runDensifyFullTest();
|
|
|
|
// Lots of off-step documents with nulls sprinkled in to confirm that a null value is
|
|
// treated the same as a missing value.
|
|
coll.drop();
|
|
insertDocumentsOnPredicate(
|
|
{base, min: 0, max: 10, pred: i => i % 3 == 0 || i % 7 == 0, addFunc: add, coll: coll});
|
|
coll.insert({val: null});
|
|
insertDocumentsOnPredicate({
|
|
base,
|
|
min: 10,
|
|
max: 20,
|
|
pred: i => i % 3 == 0 || i % 7 == 0,
|
|
addFunc: add,
|
|
coll: coll
|
|
});
|
|
coll.insert({val: null});
|
|
coll.insert({blah: base}); // Missing "val" key.
|
|
insertDocumentsOnPredicate({
|
|
base,
|
|
min: 20,
|
|
max: 25,
|
|
pred: i => i % 3 == 0 || i % 7 == 0,
|
|
addFunc: add,
|
|
coll: coll
|
|
});
|
|
|
|
runDensifyFullTest();
|
|
}
|
|
}
|
|
})();
|