summaryrefslogtreecommitdiff
path: root/jstests/core/geo_fiddly_box.js
blob: f5cd3ddcc6b21d57e9129db60a1b1bc40e261772 (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
44
45
46
47
48
49
50
51
52
53
54
55
// Reproduces simple test for SERVER-2832

// 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.ensureIndex({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.ensureIndex({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!");