diff options
-rw-r--r-- | Firestore/core/test/firebase/firestore/core/query_test.cc | 22 | ||||
-rw-r--r-- | Firestore/core/test/firebase/firestore/testutil/testutil.h | 6 |
2 files changed, 28 insertions, 0 deletions
diff --git a/Firestore/core/test/firebase/firestore/core/query_test.cc b/Firestore/core/test/firebase/firestore/core/query_test.cc index b821f7f..c71ba10 100644 --- a/Firestore/core/test/firebase/firestore/core/query_test.cc +++ b/Firestore/core/test/firebase/firestore/core/query_test.cc @@ -16,6 +16,8 @@ #include "Firestore/core/src/firebase/firestore/core/query.h" +#include <cmath> + #include "Firestore/core/src/firebase/firestore/model/document.h" #include "Firestore/core/src/firebase/firestore/model/field_path.h" #include "Firestore/core/src/firebase/firestore/model/field_value.h" @@ -97,6 +99,26 @@ TEST(QueryTest, PrimitiveValueFilter) { EXPECT_FALSE(query2.Matches(doc5)); } +TEST(QueryTest, NanFilter) { + Query query = Query::AtPath(ResourcePath::FromString("collection")) + .Filter(Filter("sort", "==", NAN)); + + Document doc1 = Doc("collection/1", 0, {{"sort", FieldValue::NanValue()}}); + Document doc2 = + Doc("collection/2", 0, {{"sort", FieldValue::IntegerValue(2)}}); + Document doc3 = + Doc("collection/3", 0, {{"sort", FieldValue::DoubleValue(3.1)}}); + Document doc4 = Doc("collection/4", 0, {{"sort", FieldValue::FalseValue()}}); + Document doc5 = + Doc("collection/5", 0, {{"sort", FieldValue::StringValue("string")}}); + + EXPECT_TRUE(query.Matches(doc1)); + EXPECT_FALSE(query.Matches(doc2)); + EXPECT_FALSE(query.Matches(doc3)); + EXPECT_FALSE(query.Matches(doc4)); + EXPECT_FALSE(query.Matches(doc5)); +} + } // namespace core } // namespace firestore } // namespace firebase diff --git a/Firestore/core/test/firebase/firestore/testutil/testutil.h b/Firestore/core/test/firebase/firestore/testutil/testutil.h index 10f8a7a..2b6a5f6 100644 --- a/Firestore/core/test/firebase/firestore/testutil/testutil.h +++ b/Firestore/core/test/firebase/firestore/testutil/testutil.h @@ -111,6 +111,12 @@ inline std::shared_ptr<core::Filter> Filter(absl::string_view key, return Filter(key, op, model::FieldValue::IntegerValue(value)); } +inline std::shared_ptr<core::Filter> Filter(absl::string_view key, + absl::string_view op, + double value) { + return Filter(key, op, model::FieldValue::DoubleValue(value)); +} + // Add a non-inline function to make this library buildable. // TODO(zxu123): remove once there is non-inline function. void dummy(); |