summaryrefslogtreecommitdiff
path: root/jstests/core/index/geo/geo_fiddly_box.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/index/geo/geo_fiddly_box.js')
-rw-r--r--jstests/core/index/geo/geo_fiddly_box.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/jstests/core/index/geo/geo_fiddly_box.js b/jstests/core/index/geo/geo_fiddly_box.js
new file mode 100644
index 00000000000..9f5a9e8d6c4
--- /dev/null
+++ b/jstests/core/index/geo/geo_fiddly_box.js
@@ -0,0 +1,57 @@
+// Reproduces simple test for SERVER-2832
+//
+// @tags: [
+// requires_fastcount,
+// ]
+
+// The setup to reproduce was/is to create a set of points where the
+// "expand" portion of the geo-lookup expands the 2d range in only one
+// direction (so points are required on either side of the expanding range)
+
+t = db.geo_fiddly_box;
+
+t.drop();
+t.createIndex({loc: "2d"});
+
+t.insert({"loc": [3, 1]});
+t.insert({"loc": [3, 0.5]});
+t.insert({"loc": [3, 0.25]});
+t.insert({"loc": [3, -0.01]});
+t.insert({"loc": [3, -0.25]});
+t.insert({"loc": [3, -0.5]});
+t.insert({"loc": [3, -1]});
+
+// OK!
+print(t.count());
+assert.eq(
+ 7, t.count({"loc": {"$within": {"$box": [[2, -2], [46, 2]]}}}), "Not all locations found!");
+
+// Test normal lookup of a small square of points as a sanity check.
+
+epsilon = 0.0001;
+min = -1;
+max = 1;
+step = 1;
+numItems = 0;
+
+t.drop();
+t.createIndex({loc: "2d"}, {max: max + epsilon / 2, min: min - epsilon / 2});
+
+for (var x = min; x <= max; x += step) {
+ for (var y = min; y <= max; y += step) {
+ t.insert({"loc": {x: x, y: y}});
+ numItems++;
+ }
+}
+
+assert.eq(
+ numItems,
+ t.count({
+ loc: {
+ $within: {
+ $box:
+ [[min - epsilon / 3, min - epsilon / 3], [max + epsilon / 3, max + epsilon / 3]]
+ }
+ }
+ }),
+ "Not all locations found!");