diff options
Diffstat (limited to 'jstests/core/geo_circle1.js')
-rw-r--r-- | jstests/core/geo_circle1.js | 43 |
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] ) ); +} |