summaryrefslogtreecommitdiff
path: root/src/mongo/db/fts/fts_element_iterator_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/fts/fts_element_iterator_test.cpp')
-rw-r--r--src/mongo/db/fts/fts_element_iterator_test.cpp536
1 files changed, 262 insertions, 274 deletions
diff --git a/src/mongo/db/fts/fts_element_iterator_test.cpp b/src/mongo/db/fts/fts_element_iterator_test.cpp
index 6d5694c5990..2a16c14b5a5 100644
--- a/src/mongo/db/fts/fts_element_iterator_test.cpp
+++ b/src/mongo/db/fts/fts_element_iterator_test.cpp
@@ -34,279 +34,267 @@
#include "mongo/unittest/unittest.h"
namespace mongo {
- namespace fts {
-
- using std::string;
-
- TEST( FTSElementIterator, Test1 ) {
-
- BSONObj obj = fromjson(
- "{ b : \"walking\","
- " c : { e: \"walked\" },"
- " d : \"walker\""
- " }" );
-
- BSONObj indexSpec = fromjson(
- "{ key : { a : \"text\" }, weights : { b : 10, d : 5 } }" );
-
- FTSSpec spec( FTSSpec::fixSpec( indexSpec ) );
- Weights::const_iterator itt = spec.weights().begin();
- ASSERT( itt != spec.weights().end() );
- ASSERT_EQUALS( "a", itt->first );
- ASSERT_EQUALS( 1, itt->second );
- ++itt;
- ASSERT( itt != spec.weights().end() );
- ASSERT_EQUALS( "b", itt->first );
- ASSERT_EQUALS( 10, itt->second );
- ++itt;
- ASSERT( itt != spec.weights().end() );
- ASSERT_EQUALS( "d", itt->first );
- ASSERT_EQUALS( 5, itt->second );
- ++itt;
-
- FTSElementIterator it( spec, obj );
-
- ASSERT( it.more() );
- FTSIteratorValue val = it.next();
- ASSERT_EQUALS( "walking", string(val._text) );
- ASSERT_EQUALS( "english", val._language->str() );
- ASSERT_EQUALS( 10, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "walker", string(val._text) );
- ASSERT_EQUALS( "english", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
- }
-
- // Multi-language : test
- TEST( FTSElementIterator, Test2 ) {
-
- BSONObj obj = fromjson(
- "{ a :"
- " { b :"
- " [ { c : \"walked\", language : \"english\" },"
- " { c : \"camminato\", language : \"italian\" },"
- " { c : \"ging\", language : \"german\" } ]"
- " },"
- " d : \"Feliz Año Nuevo!\","
- " language : \"spanish\""
- " }" );
-
- BSONObj indexSpec = fromjson(
- "{ key : { \"a.b.c\" : \"text\", d : \"text\" } }" );
-
- FTSSpec spec( FTSSpec::fixSpec( indexSpec ) );
-
- FTSElementIterator it( spec, obj );
-
- ASSERT( it.more() );
- FTSIteratorValue val = it.next();
- ASSERT_EQUALS( "walked", string(val._text) );
- ASSERT_EQUALS( "english", val._language->str() );
- ASSERT_EQUALS( 1, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "camminato", string(val._text) );
- ASSERT_EQUALS( "italian", val._language->str() );
- ASSERT_EQUALS( 1, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "ging", string(val._text) );
- ASSERT_EQUALS( "german", val._language->str() );
- ASSERT_EQUALS( 1, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "Feliz Año Nuevo!", string(val._text) );
- ASSERT_EQUALS( "spanish", val._language->str() );
- ASSERT_EQUALS( 1, val._weight );
- }
-
- // Multi-language : test nested stemming per sub-document
- TEST( FTSElementIterator, Test3 ) {
-
- BSONObj obj = fromjson(
- "{ language : \"english\","
- " a :"
- " { language : \"danish\","
- " b :"
- " [ { c : \"foredrag\" },"
- " { c : \"foredragsholder\" },"
- " { c : \"lector\" } ]"
- " }"
- "}" );
-
- BSONObj indexSpec = fromjson(
- "{ key : { a : \"text\", \"a.b.c\" : \"text\" }, weights : { \"a.b.c\" : 5 } }" );
-
- FTSSpec spec( FTSSpec::fixSpec( indexSpec ) );
- Weights::const_iterator itt = spec.weights().begin();
- ASSERT( itt != spec.weights().end() );
- ASSERT_EQUALS( "a", itt->first );
- ASSERT_EQUALS( 1, itt->second );
- ++itt;
- ASSERT( itt != spec.weights().end() );
- ASSERT_EQUALS( "a.b.c", itt->first );
- ASSERT_EQUALS( 5, itt->second );
-
- FTSElementIterator it( spec, obj );
-
- ASSERT( it.more() );
- FTSIteratorValue val = it.next();
- ASSERT_EQUALS( "foredrag", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "foredragsholder", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "lector", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- }
-
- // Multi-language : test nested arrays
- TEST( FTSElementIterator, Test4 ) {
-
- BSONObj obj = fromjson(
- "{ language : \"english\","
- " a : ["
- " { language : \"danish\","
- " b :"
- " [ { c : [\"foredrag\"] },"
- " { c : [\"foredragsholder\"] },"
- " { c : [\"lector\"] } ]"
- " } ]"
- "}" );
-
- BSONObj indexSpec = fromjson(
- "{ key : { \"a.b.c\" : \"text\" }, weights : { \"a.b.c\" : 5 } }" );
-
- FTSSpec spec( FTSSpec::fixSpec( indexSpec ) );
- FTSElementIterator it( spec, obj );
-
- ASSERT( it.more() );
- FTSIteratorValue val = it.next();
- ASSERT_EQUALS( "foredrag", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "foredragsholder", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "lector", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- }
-
- // Multi-language : test wildcard spec
- TEST( FTSElementIterator, Test5 ) {
-
- BSONObj obj = fromjson(
- "{ language : \"english\","
- " b : \"these boots were made for walking\","
- " c : { e: \"I walked half way to the market before seeing the sunrise\" },"
- " d : "
- " { language : \"danish\","
- " e :"
- " [ { f : \"foredrag\", g : 12 },"
- " { f : \"foredragsholder\", g : 13 },"
- " { f : \"lector\", g : 14 } ]"
- " }"
- "}" );
-
- BSONObj indexSpec = fromjson(
- "{ key : { a : \"text\" }, weights : { b : 20, c : 10, \"d.e.f\" : 5 } }" );
-
- FTSSpec spec( FTSSpec::fixSpec( indexSpec ) );
- FTSElementIterator it( spec, obj );
-
- ASSERT( it.more() );
- FTSIteratorValue val = it.next();
- ASSERT_EQUALS( "these boots were made for walking", string(val._text) );
- ASSERT_EQUALS( "english", val._language->str() );
- ASSERT_EQUALS( 20, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "foredrag", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "foredragsholder", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "lector", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
- }
-
- // Multi-language : test wildcard spec
- TEST( FTSElementIterator, Test6 ) {
-
- BSONObj obj = fromjson(
- "{ language : \"english\","
- " b : \"these boots were made for walking\","
- " c : { e: \"I walked half way to the market before seeing the sunrise\" },"
- " d : "
- " { language : \"danish\","
- " e :"
- " [ { f : \"foredrag\", g : 12 },"
- " { f : \"foredragsholder\", g : 13 },"
- " { f : \"lector\", g : 14 } ]"
- " }"
- "}" );
-
- BSONObj indexSpec = fromjson(
- "{ key : { a : \"text\" }, weights : { b : 20, c : 10, \"d.e.f\" : 5 } }" );
-
- FTSSpec spec( FTSSpec::fixSpec( indexSpec ) );
- FTSElementIterator it( spec, obj );
-
- ASSERT( it.more() );
- FTSIteratorValue val = it.next();
- ASSERT_EQUALS( "these boots were made for walking", string(val._text) );
- ASSERT_EQUALS( "english", val._language->str() );
- ASSERT_EQUALS( 20, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "foredrag", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "foredragsholder", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
-
- ASSERT( it.more() );
- val = it.next();
- ASSERT_EQUALS( "lector", string(val._text) );
- ASSERT_EQUALS( "danish", val._language->str() );
- ASSERT_EQUALS( 5, val._weight );
- }
- }
+namespace fts {
+
+using std::string;
+
+TEST(FTSElementIterator, Test1) {
+ BSONObj obj = fromjson(
+ "{ b : \"walking\","
+ " c : { e: \"walked\" },"
+ " d : \"walker\""
+ " }");
+
+ BSONObj indexSpec = fromjson("{ key : { a : \"text\" }, weights : { b : 10, d : 5 } }");
+
+ FTSSpec spec(FTSSpec::fixSpec(indexSpec));
+ Weights::const_iterator itt = spec.weights().begin();
+ ASSERT(itt != spec.weights().end());
+ ASSERT_EQUALS("a", itt->first);
+ ASSERT_EQUALS(1, itt->second);
+ ++itt;
+ ASSERT(itt != spec.weights().end());
+ ASSERT_EQUALS("b", itt->first);
+ ASSERT_EQUALS(10, itt->second);
+ ++itt;
+ ASSERT(itt != spec.weights().end());
+ ASSERT_EQUALS("d", itt->first);
+ ASSERT_EQUALS(5, itt->second);
+ ++itt;
+
+ FTSElementIterator it(spec, obj);
+
+ ASSERT(it.more());
+ FTSIteratorValue val = it.next();
+ ASSERT_EQUALS("walking", string(val._text));
+ ASSERT_EQUALS("english", val._language->str());
+ ASSERT_EQUALS(10, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("walker", string(val._text));
+ ASSERT_EQUALS("english", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
}
+// Multi-language : test
+TEST(FTSElementIterator, Test2) {
+ BSONObj obj = fromjson(
+ "{ a :"
+ " { b :"
+ " [ { c : \"walked\", language : \"english\" },"
+ " { c : \"camminato\", language : \"italian\" },"
+ " { c : \"ging\", language : \"german\" } ]"
+ " },"
+ " d : \"Feliz Año Nuevo!\","
+ " language : \"spanish\""
+ " }");
+
+ BSONObj indexSpec = fromjson("{ key : { \"a.b.c\" : \"text\", d : \"text\" } }");
+
+ FTSSpec spec(FTSSpec::fixSpec(indexSpec));
+
+ FTSElementIterator it(spec, obj);
+
+ ASSERT(it.more());
+ FTSIteratorValue val = it.next();
+ ASSERT_EQUALS("walked", string(val._text));
+ ASSERT_EQUALS("english", val._language->str());
+ ASSERT_EQUALS(1, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("camminato", string(val._text));
+ ASSERT_EQUALS("italian", val._language->str());
+ ASSERT_EQUALS(1, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("ging", string(val._text));
+ ASSERT_EQUALS("german", val._language->str());
+ ASSERT_EQUALS(1, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("Feliz Año Nuevo!", string(val._text));
+ ASSERT_EQUALS("spanish", val._language->str());
+ ASSERT_EQUALS(1, val._weight);
+}
+
+// Multi-language : test nested stemming per sub-document
+TEST(FTSElementIterator, Test3) {
+ BSONObj obj = fromjson(
+ "{ language : \"english\","
+ " a :"
+ " { language : \"danish\","
+ " b :"
+ " [ { c : \"foredrag\" },"
+ " { c : \"foredragsholder\" },"
+ " { c : \"lector\" } ]"
+ " }"
+ "}");
+
+ BSONObj indexSpec =
+ fromjson("{ key : { a : \"text\", \"a.b.c\" : \"text\" }, weights : { \"a.b.c\" : 5 } }");
+
+ FTSSpec spec(FTSSpec::fixSpec(indexSpec));
+ Weights::const_iterator itt = spec.weights().begin();
+ ASSERT(itt != spec.weights().end());
+ ASSERT_EQUALS("a", itt->first);
+ ASSERT_EQUALS(1, itt->second);
+ ++itt;
+ ASSERT(itt != spec.weights().end());
+ ASSERT_EQUALS("a.b.c", itt->first);
+ ASSERT_EQUALS(5, itt->second);
+
+ FTSElementIterator it(spec, obj);
+
+ ASSERT(it.more());
+ FTSIteratorValue val = it.next();
+ ASSERT_EQUALS("foredrag", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("foredragsholder", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("lector", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+}
+
+// Multi-language : test nested arrays
+TEST(FTSElementIterator, Test4) {
+ BSONObj obj = fromjson(
+ "{ language : \"english\","
+ " a : ["
+ " { language : \"danish\","
+ " b :"
+ " [ { c : [\"foredrag\"] },"
+ " { c : [\"foredragsholder\"] },"
+ " { c : [\"lector\"] } ]"
+ " } ]"
+ "}");
+
+ BSONObj indexSpec = fromjson("{ key : { \"a.b.c\" : \"text\" }, weights : { \"a.b.c\" : 5 } }");
+
+ FTSSpec spec(FTSSpec::fixSpec(indexSpec));
+ FTSElementIterator it(spec, obj);
+
+ ASSERT(it.more());
+ FTSIteratorValue val = it.next();
+ ASSERT_EQUALS("foredrag", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("foredragsholder", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("lector", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+}
+
+// Multi-language : test wildcard spec
+TEST(FTSElementIterator, Test5) {
+ BSONObj obj = fromjson(
+ "{ language : \"english\","
+ " b : \"these boots were made for walking\","
+ " c : { e: \"I walked half way to the market before seeing the sunrise\" },"
+ " d : "
+ " { language : \"danish\","
+ " e :"
+ " [ { f : \"foredrag\", g : 12 },"
+ " { f : \"foredragsholder\", g : 13 },"
+ " { f : \"lector\", g : 14 } ]"
+ " }"
+ "}");
+
+ BSONObj indexSpec =
+ fromjson("{ key : { a : \"text\" }, weights : { b : 20, c : 10, \"d.e.f\" : 5 } }");
+
+ FTSSpec spec(FTSSpec::fixSpec(indexSpec));
+ FTSElementIterator it(spec, obj);
+
+ ASSERT(it.more());
+ FTSIteratorValue val = it.next();
+ ASSERT_EQUALS("these boots were made for walking", string(val._text));
+ ASSERT_EQUALS("english", val._language->str());
+ ASSERT_EQUALS(20, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("foredrag", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("foredragsholder", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("lector", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+}
+
+// Multi-language : test wildcard spec
+TEST(FTSElementIterator, Test6) {
+ BSONObj obj = fromjson(
+ "{ language : \"english\","
+ " b : \"these boots were made for walking\","
+ " c : { e: \"I walked half way to the market before seeing the sunrise\" },"
+ " d : "
+ " { language : \"danish\","
+ " e :"
+ " [ { f : \"foredrag\", g : 12 },"
+ " { f : \"foredragsholder\", g : 13 },"
+ " { f : \"lector\", g : 14 } ]"
+ " }"
+ "}");
+
+ BSONObj indexSpec =
+ fromjson("{ key : { a : \"text\" }, weights : { b : 20, c : 10, \"d.e.f\" : 5 } }");
+
+ FTSSpec spec(FTSSpec::fixSpec(indexSpec));
+ FTSElementIterator it(spec, obj);
+
+ ASSERT(it.more());
+ FTSIteratorValue val = it.next();
+ ASSERT_EQUALS("these boots were made for walking", string(val._text));
+ ASSERT_EQUALS("english", val._language->str());
+ ASSERT_EQUALS(20, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("foredrag", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("foredragsholder", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+
+ ASSERT(it.more());
+ val = it.next();
+ ASSERT_EQUALS("lector", string(val._text));
+ ASSERT_EQUALS("danish", val._language->str());
+ ASSERT_EQUALS(5, val._weight);
+}
+}
+}