summaryrefslogtreecommitdiff
path: root/jstests/core/geo_center_sphere2.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/geo_center_sphere2.js')
-rw-r--r--jstests/core/geo_center_sphere2.js119
1 files changed, 65 insertions, 54 deletions
diff --git a/jstests/core/geo_center_sphere2.js b/jstests/core/geo_center_sphere2.js
index a569c4d5c96..ac8f09cbe77 100644
--- a/jstests/core/geo_center_sphere2.js
+++ b/jstests/core/geo_center_sphere2.js
@@ -5,39 +5,42 @@
// multiple documents, and so requires simultaneous testing.
//
-function deg2rad(arg) { return arg * Math.PI / 180.0; }
-function rad2deg(arg) { return arg * 180.0 / Math.PI; }
+function deg2rad(arg) {
+ return arg * Math.PI / 180.0;
+}
+function rad2deg(arg) {
+ return arg * 180.0 / Math.PI;
+}
function computexscandist(y, maxDistDegrees) {
- return maxDistDegrees / Math.min(Math.cos(deg2rad(Math.min(89.0, y + maxDistDegrees))),
- Math.cos(deg2rad(Math.max(-89.0, y - maxDistDegrees))));
+ return maxDistDegrees /
+ Math.min(Math.cos(deg2rad(Math.min(89.0, y + maxDistDegrees))),
+ Math.cos(deg2rad(Math.max(-89.0, y - maxDistDegrees))));
}
function pointIsOK(startPoint, radius) {
yscandist = rad2deg(radius) + 0.01;
xscandist = computexscandist(startPoint[1], yscandist);
- return (startPoint[0] + xscandist < 180)
- && (startPoint[0] - xscandist > -180)
- && (startPoint[1] + yscandist < 90)
- && (startPoint[1] - yscandist > -90);
+ return (startPoint[0] + xscandist < 180) && (startPoint[0] - xscandist > -180) &&
+ (startPoint[1] + yscandist < 90) && (startPoint[1] - yscandist > -90);
}
var numTests = 30;
-for ( var test = 0; test < numTests; test++ ) {
- Random.srand( 1337 + test );
+for (var test = 0; test < numTests; test++) {
+ Random.srand(1337 + test);
- var radius = 5000 * Random.rand(); // km
- radius = radius / 6378.1; // radians; earth radius from geoconstants.h
- var numDocs = Math.floor( 400 * Random.rand() );
+ var radius = 5000 * Random.rand(); // km
+ radius = radius / 6378.1; // radians; earth radius from geoconstants.h
+ var numDocs = Math.floor(400 * Random.rand());
// TODO: Wrapping uses the error value to figure out what would overlap...
- var bits = Math.floor( 5 + Random.rand() * 28 );
+ var bits = Math.floor(5 + Random.rand() * 28);
var maxPointsPerDoc = 50;
var t = db.sphere;
var randomPoint = function() {
- return [ Random.rand() * 360 - 180, Random.rand() * 180 - 90 ];
+ return [Random.rand() * 360 - 180, Random.rand() * 180 - 90];
};
// Get a start point that doesn't require wrapping
@@ -47,7 +50,7 @@ for ( var test = 0; test < numTests; test++ ) {
do {
t.drop();
startPoint = randomPoint();
- t.ensureIndex( { loc : "2d" }, { bits : bits } );
+ t.ensureIndex({loc: "2d"}, {bits: bits});
} while (!pointIsOK(startPoint, radius));
var pointsIn = 0;
@@ -57,19 +60,18 @@ for ( var test = 0; test < numTests; test++ ) {
var totalPoints = 0;
var bulk = t.initializeUnorderedBulkOp();
- for ( var i = 0; i < numDocs; i++ ) {
-
- var numPoints = Math.floor( Random.rand() * maxPointsPerDoc + 1 );
+ for (var i = 0; i < numDocs; i++) {
+ var numPoints = Math.floor(Random.rand() * maxPointsPerDoc + 1);
var docIn = false;
var multiPoint = [];
totalPoints += numPoints;
- for ( var p = 0; p < numPoints; p++ ) {
+ for (var p = 0; p < numPoints; p++) {
var point = randomPoint();
- multiPoint.push( point );
+ multiPoint.push(point);
- if ( Geo.sphereDistance( startPoint, point ) <= radius ) {
+ if (Geo.sphereDistance(startPoint, point) <= radius) {
pointsIn++;
docIn = true;
} else {
@@ -77,54 +79,64 @@ for ( var test = 0; test < numTests; test++ ) {
}
}
- bulk.insert( { loc : multiPoint } );
+ bulk.insert({loc: multiPoint});
- if ( docIn )
+ if (docIn)
docsIn++;
else
docsOut++;
-
}
- printjson( { test: test, radius : radius, bits : bits, numDocs : numDocs,
- pointsIn : pointsIn, docsIn : docsIn, pointsOut : pointsOut,
- docsOut : docsOut } );
+ printjson({
+ test: test,
+ radius: radius,
+ bits: bits,
+ numDocs: numDocs,
+ pointsIn: pointsIn,
+ docsIn: docsIn,
+ pointsOut: pointsOut,
+ docsOut: docsOut
+ });
assert.writeOK(bulk.execute());
- assert.eq( docsIn + docsOut, numDocs );
- assert.eq( pointsIn + pointsOut, totalPoints );
+ assert.eq(docsIn + docsOut, numDocs);
+ assert.eq(pointsIn + pointsOut, totalPoints);
// $centerSphere
- assert.eq( docsIn, t.find({ loc: { $within:
- { $centerSphere: [ startPoint, radius ]}}} ).count() );
+ assert.eq(docsIn, t.find({loc: {$within: {$centerSphere: [startPoint, radius]}}}).count());
// $nearSphere
- var cursor = t.find({ loc: { $nearSphere: startPoint, $maxDistance: radius }});
- var results = cursor.limit( 2 * pointsIn ).toArray();
+ var cursor = t.find({loc: {$nearSphere: startPoint, $maxDistance: radius}});
+ var results = cursor.limit(2 * pointsIn).toArray();
- assert.eq( docsIn, results.length );
+ assert.eq(docsIn, results.length);
var distance = 0;
- for ( var i = 0; i < results.length; i++ ) {
+ for (var i = 0; i < results.length; i++) {
var minNewDistance = radius + 1;
- for( var j = 0; j < results[i].loc.length; j++ ){
- var newDistance = Geo.sphereDistance( startPoint, results[i].loc[j] );
- if( newDistance < minNewDistance && newDistance >= distance ) {
+ for (var j = 0; j < results[i].loc.length; j++) {
+ var newDistance = Geo.sphereDistance(startPoint, results[i].loc[j]);
+ if (newDistance < minNewDistance && newDistance >= distance) {
minNewDistance = newDistance;
}
}
- //print( "Dist from : " + results[i].loc[j] + " to " + startPoint + " is "
+ // print( "Dist from : " + results[i].loc[j] + " to " + startPoint + " is "
// + minNewDistance + " vs " + radius )
- assert.lte( minNewDistance, radius );
- assert.gte( minNewDistance, distance );
+ assert.lte(minNewDistance, radius);
+ assert.gte(minNewDistance, distance);
distance = minNewDistance;
}
// geoNear
- results = db.runCommand({ geoNear: "sphere", near: startPoint, maxDistance: radius,
- num : 2 * pointsIn, spherical : true } ).results;
+ results = db.runCommand({
+ geoNear: "sphere",
+ near: startPoint,
+ maxDistance: radius,
+ num: 2 * pointsIn,
+ spherical: true
+ }).results;
/*
printjson( results );
@@ -135,26 +147,25 @@ for ( var test = 0; test < numTests; test++ ) {
}
*/
- assert.eq( docsIn, results.length );
+ assert.eq(docsIn, results.length);
var distance = 0;
- for ( var i = 0; i < results.length; i++ ) {
+ for (var i = 0; i < results.length; i++) {
var retDistance = results[i].dis;
// print( "Dist from : " + results[i].loc + " to " + startPoint + " is "
// + retDistance + " vs " + radius )
var distInObj = false;
- for ( var j = 0; j < results[i].obj.loc.length && distInObj == false; j++ ) {
- var newDistance = Geo.sphereDistance( startPoint, results[i].obj.loc[j] );
- distInObj = ( newDistance >= retDistance - 0.0001 &&
- newDistance <= retDistance + 0.0001 );
+ for (var j = 0; j < results[i].obj.loc.length && distInObj == false; j++) {
+ var newDistance = Geo.sphereDistance(startPoint, results[i].obj.loc[j]);
+ distInObj =
+ (newDistance >= retDistance - 0.0001 && newDistance <= retDistance + 0.0001);
}
- assert( distInObj );
- assert.lte( retDistance, radius );
- assert.gte( retDistance, distance );
+ assert(distInObj);
+ assert.lte(retDistance, radius);
+ assert.gte(retDistance, distance);
distance = retDistance;
}
}
-