summaryrefslogtreecommitdiff
path: root/jstests/aggregation/sources/densify/explicit_range.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/sources/densify/explicit_range.js')
-rw-r--r--jstests/aggregation/sources/densify/explicit_range.js92
1 files changed, 30 insertions, 62 deletions
diff --git a/jstests/aggregation/sources/densify/explicit_range.js b/jstests/aggregation/sources/densify/explicit_range.js
index a2c2edd92f7..842ae79d5bf 100644
--- a/jstests/aggregation/sources/densify/explicit_range.js
+++ b/jstests/aggregation/sources/densify/explicit_range.js
@@ -16,77 +16,66 @@ coll.drop();
// Run all tests for each date unit and on numeric values.
for (let i = 0; i < densifyUnits.length; i++) {
- coll.drop();
-
const unit = densifyUnits[i];
+ coll.drop();
const base = unit ? new ISODate("2021-01-01") : 0;
const {add} = getArithmeticFunctionsForUnit(unit);
- const getBounds = (lower, upper) => {
- return [add(base, lower), add(base, upper)];
- };
+ const runDensifyRangeTest = ({step, bounds}, msg) => testDensifyStage({
+ field: "val",
+ range: {step, bounds: [add(base, bounds[0]), add(base, bounds[1])], unit: unit}
+ },
+ coll,
+ msg);
// Run all tests for different step values.
for (let i = 0; i < interestingSteps.length; i++) {
const step = interestingSteps[i];
-
// Generate documents in an empty collection.
- let stage = {field: "val", range: {step: step, bounds: getBounds(0, 10), unit: unit}};
- testDensifyStage(stage, coll);
+ runDensifyRangeTest({step, bounds: [0, 10]});
// Fill in some documents between existing docs.
coll.drop();
coll.insert({val: base});
- coll.insert({val: add(base, 30)});
- // Checking that the upper bound is exclusive.
- stage = {field: "val", range: {step: step, bounds: getBounds(10, 25), unit: unit}};
- testDensifyStage(stage, coll);
+ coll.insert({val: add(base, 99)});
+ runDensifyRangeTest(
+ {step, bounds: [10, 25]}); // Checking that the upper bound is exclusive.
// Fill in odd documents.
coll.drop();
- insertDocumentsOnStep({base, min: 2, max: 11, step: 2, addFunc: add, coll: coll});
-
- stage = {field: "val", range: {step: step, bounds: getBounds(1, 12), unit: unit}};
- testDensifyStage(stage, coll);
- stage = {field: "val", range: {step: step, bounds: getBounds(1, 11), unit: unit}};
- testDensifyStage(stage, coll);
- stage = {field: "val", range: {step: step, bounds: getBounds(1, 10), unit: unit}};
- testDensifyStage(stage, coll);
+ insertDocumentsOnStep({base, min: 2, max: 21, step: 2, addFunc: add, coll: coll});
+ runDensifyRangeTest({step, bounds: [1, 22]});
+ runDensifyRangeTest({step, bounds: [1, 21]});
+ runDensifyRangeTest({step, bounds: [1, 20]});
// Negative numbers.
coll.drop();
- insertDocumentsOnStep({base, min: -20, max: -1, step: 2, addFunc: add, coll: coll});
- stage = {field: "val", range: {step: step, bounds: getBounds(-10, -1), unit: unit}};
- testDensifyStage(stage, coll);
- stage = {field: "val", range: {step: step, bounds: getBounds(-10, 0), unit: unit}};
- testDensifyStage(stage, coll);
- stage = {field: "val", range: {step: step, bounds: getBounds(-10, -2), unit: unit}};
- testDensifyStage(stage, coll);
+ insertDocumentsOnStep({base, min: -100, max: -1, step: 2, addFunc: add, coll: coll});
+ runDensifyRangeTest({step, bounds: [-40, -5]});
+ runDensifyRangeTest({step, bounds: [-60, 0]});
+ runDensifyRangeTest({step, bounds: [-40, -6]});
// Extend range past collection.
coll.drop();
- insertDocumentsOnStep({base, min: 0, max: 10, step: 3, addFunc: add, coll: coll});
- stage = {field: "val", range: {step: step, bounds: getBounds(5, 15), unit: unit}};
- testDensifyStage(stage, coll);
+ insertDocumentsOnStep({base, min: 0, max: 50, step: 3, addFunc: add, coll: coll});
+ runDensifyRangeTest({step, bounds: [30, 75]});
// Start range before collection.
coll.drop();
- insertDocumentsOnStep({base, min: 20, max: 30, step: 2, addFunc: add, coll: coll});
- stage = {field: "val", range: {step: step, bounds: getBounds(10, 25), unit: unit}};
- testDensifyStage(stage, coll);
+ insertDocumentsOnStep({base, min: 20, max: 40, step: 2, addFunc: add, coll: coll});
+ runDensifyRangeTest({step, bounds: [10, 25]});
// Extend range in both directions past collection bounds.
coll.drop();
- insertDocumentsOnStep({base, min: 20, max: 30, step: 2, addFunc: add, coll: coll});
- stage = {field: "val", range: {step: step, bounds: getBounds(10, 35), unit: unit}};
- testDensifyStage(stage, coll);
+ insertDocumentsOnStep({base, min: 20, max: 40, step: 2, addFunc: add, coll: coll});
+ runDensifyRangeTest({step, bounds: [10, 45]});
// Different off-step documents.
coll.drop();
insertDocumentsOnPredicate(
- {base, min: 0, max: 25, pred: i => i % 3 == 0 || i % 7 == 0, addFunc: add, coll: coll});
- stage = {field: "val", range: {step: step, bounds: getBounds(10, 20), unit: unit}};
- testDensifyStage(stage, coll);
+ {base, min: 0, max: 50, pred: i => i % 3 == 0 || i % 7 == 0, addFunc: add, coll: coll});
+
+ runDensifyRangeTest({step, bounds: [10, 45]});
// Lots of off-step documents with nulls sprinkled in to confirm that a null value is
// treated the same as a missing value.
@@ -107,33 +96,12 @@ for (let i = 0; i < densifyUnits.length; i++) {
insertDocumentsOnPredicate({
base,
min: 20,
- max: 30,
+ max: 50,
pred: i => i % 3 == 0 || i % 7 == 0,
addFunc: add,
coll: coll
});
- stage = {field: "val", range: {step: step, bounds: getBounds(10, 25), unit: unit}};
- testDensifyStage(stage, coll);
+ runDensifyRangeTest({step, bounds: [10, 45]});
}
}
-
-// Run a test where there are no documents in the range to ensure we don't generate anything before
-// the range.
-coll.drop();
-let documents = [
- {"date": ISODate("2022-10-29T23:00:00Z")},
-];
-coll.insert(documents);
-let stage = {
- field: "date",
- range: {
- step: 1,
- unit: "month",
- bounds: [
- ISODate("2022-10-31T23:00:00.000Z"),
- ISODate("2022-11-30T23:00:00.000Z"),
- ],
- },
-};
-testDensifyStage(stage, coll, "Ensure no docs before range");
})();