summaryrefslogtreecommitdiff
path: root/jstests/core/geo_circle1.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/geo_circle1.js')
-rw-r--r--jstests/core/geo_circle1.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/jstests/core/geo_circle1.js b/jstests/core/geo_circle1.js
new file mode 100644
index 00000000000..852b60d186b
--- /dev/null
+++ b/jstests/core/geo_circle1.js
@@ -0,0 +1,43 @@
+
+t = db.geo_circle1;
+t.drop();
+
+searches = [
+ [ [ 5 , 5 ] , 3 ] ,
+ [ [ 5 , 5 ] , 1 ] ,
+ [ [ 5 , 5 ] , 5 ] ,
+ [ [ 0 , 5 ] , 5 ] ,
+];
+correct = searches.map( function(z){ return []; } );
+
+num = 0;
+
+for ( x=0; x<=20; x++ ){
+ for ( y=0; y<=20; y++ ){
+ o = { _id : num++ , loc : [ x , y ] }
+ t.save( o )
+ for ( i=0; i<searches.length; i++ )
+ if ( Geo.distance( [ x , y ] , searches[i][0] ) <= searches[i][1] )
+ correct[i].push( o );
+ }
+}
+
+t.ensureIndex( { loc : "2d" } );
+
+for ( i=0; i<searches.length; i++ ){
+ //print( tojson( searches[i] ) + "\t" + correct[i].length )
+ q = { loc : { $within : { $center : searches[i] } } }
+
+ //correct[i].forEach( printjson )
+ //printjson( q );
+ //t.find( q ).forEach( printjson )
+
+ //printjson( Array.sort( correct[i].map( function(z){ return z._id; } ) ) )
+ //printjson( Array.sort( t.find(q).map( function(z){ return z._id; } ) ) )
+
+ assert.eq( correct[i].length , t.find( q ).itcount() , "itcount : " + tojson( searches[i] ) );
+ assert.eq( correct[i].length , t.find( q ).count() , "count : " + tojson( searches[i] ) );
+ var explain = t.find( q ).explain();
+ print( 'explain for ' + tojson( q , '' , true ) + ' = ' + tojson( explain ) );
+ assert.gt( correct[i].length * 2 , explain.nscanned , "nscanned : " + tojson( searches[i] ) );
+}