diff options
Diffstat (limited to 'dbtests/matchertests.cpp')
-rw-r--r-- | dbtests/matchertests.cpp | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/dbtests/matchertests.cpp b/dbtests/matchertests.cpp index 696c924..380b8b8 100644 --- a/dbtests/matchertests.cpp +++ b/dbtests/matchertests.cpp @@ -18,12 +18,15 @@ */ #include "pch.h" -#include "../db/matcher.h" +#include "../util/timer.h" +#include "../db/matcher.h" #include "../db/json.h" #include "dbtests.h" + + namespace MatcherTests { class Basic { @@ -34,26 +37,26 @@ namespace MatcherTests { ASSERT( m.matches( fromjson( "{\"a\":\"b\"}" ) ) ); } }; - + class DoubleEqual { public: void run() { BSONObj query = fromjson( "{\"a\":5}" ); Matcher m( query ); - ASSERT( m.matches( fromjson( "{\"a\":5}" ) ) ); + ASSERT( m.matches( fromjson( "{\"a\":5}" ) ) ); } }; - + class MixedNumericEqual { public: void run() { BSONObjBuilder query; query.append( "a", 5 ); Matcher m( query.done() ); - ASSERT( m.matches( fromjson( "{\"a\":5}" ) ) ); - } + ASSERT( m.matches( fromjson( "{\"a\":5}" ) ) ); + } }; - + class MixedNumericGt { public: void run() { @@ -62,16 +65,16 @@ namespace MatcherTests { BSONObjBuilder b; b.append( "a", 5 ); ASSERT( m.matches( b.done() ) ); - } + } }; - + class MixedNumericIN { public: - void run(){ + void run() { BSONObj query = fromjson( "{ a : { $in : [4,6] } }" ); ASSERT_EQUALS( 4 , query["a"].embeddedObject()["$in"].embeddedObject()["0"].number() ); ASSERT_EQUALS( NumberInt , query["a"].embeddedObject()["$in"].embeddedObject()["0"].type() ); - + Matcher m( query ); { @@ -92,19 +95,19 @@ namespace MatcherTests { b.append( "a" , 4 ); ASSERT( m.matches( b.done() ) ); } - + } }; class MixedNumericEmbedded { public: - void run(){ + void run() { Matcher m( BSON( "a" << BSON( "x" << 1 ) ) ); ASSERT( m.matches( BSON( "a" << BSON( "x" << 1 ) ) ) ); ASSERT( m.matches( BSON( "a" << BSON( "x" << 1.0 ) ) ) ); } }; - + class Size { public: void run() { @@ -113,16 +116,38 @@ namespace MatcherTests { ASSERT( !m.matches( fromjson( "{a:[1,2,3]}" ) ) ); ASSERT( !m.matches( fromjson( "{a:[1,2,3,'a','b']}" ) ) ); ASSERT( !m.matches( fromjson( "{a:[[1,2,3,4]]}" ) ) ); - } + } + }; + + + class TimingBase { + public: + long time( const BSONObj& patt , const BSONObj& obj ) { + Matcher m( patt ); + Timer t; + for ( int i=0; i<10000; i++ ) { + ASSERT( m.matches( obj ) ); + } + return t.millis(); + } + }; + + class AllTiming : public TimingBase { + public: + void run() { + long normal = time( BSON( "x" << 5 ) , BSON( "x" << 5 ) ); + long all = time( BSON( "x" << BSON( "$all" << BSON_ARRAY( 5 ) ) ) , BSON( "x" << 5 ) ); + + cout << "normal: " << normal << " all: " << all << endl; + } }; - class All : public Suite { public: - All() : Suite( "matcher" ){ + All() : Suite( "matcher" ) { } - - void setupTests(){ + + void setupTests() { add< Basic >(); add< DoubleEqual >(); add< MixedNumericEqual >(); @@ -130,8 +155,9 @@ namespace MatcherTests { add< MixedNumericIN >(); add< Size >(); add< MixedNumericEmbedded >(); + add< AllTiming >(); } } dball; - + } // namespace MatcherTests |