summaryrefslogtreecommitdiffstats
path: root/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp')
-rw-r--r--searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp62
1 files changed, 56 insertions, 6 deletions
diff --git a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
index 01b458daf5d..240e7334292 100644
--- a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
+++ b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
@@ -8,6 +8,7 @@
#include <vespa/searchlib/attribute/floatbase.h>
#include <vespa/searchlib/attribute/integerbase.h>
#include <vespa/searchlib/attribute/stringbase.h>
+#include <vespa/searchlib/common/matching_elements.h>
#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h>
#include <vespa/searchsummary/docsummary/docsumstate.h>
#include <vespa/searchsummary/docsummary/docsum_field_writer_state.h>
@@ -23,6 +24,7 @@ using search::AttributeManager;
using search::AttributeVector;
using search::IntegerAttribute;
using search::FloatingPointAttribute;
+using search::MatchingElements;
using search::StringAttribute;
using search::attribute::BasicType;
using search::attribute::CollectionType;
@@ -157,12 +159,30 @@ AttributeManagerFixture::buildIntegerAttribute(const vespalib::string &name,
class DummyStateCallback : public GetDocsumsStateCallback
{
public:
+ MatchingElements _matching_elements;
+
+ DummyStateCallback();
void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override { }
void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override { }
void ParseLocation(GetDocsumsState *) override { }
+ const MatchingElements& fill_matching_elements() override { return _matching_elements; }
~DummyStateCallback() override { }
};
+DummyStateCallback::DummyStateCallback()
+ : GetDocsumsStateCallback(),
+ _matching_elements()
+{
+ _matching_elements.add_matching_elements(1, "array", {1});
+ _matching_elements.add_matching_elements(3, "array", {0});
+ _matching_elements.add_matching_elements(4, "array", {1});
+ _matching_elements.add_matching_elements(1, "smap", {1});
+ _matching_elements.add_matching_elements(3, "smap", {0});
+ _matching_elements.add_matching_elements(4, "smap", {1});
+ _matching_elements.add_matching_elements(1, "map", {1});
+ _matching_elements.add_matching_elements(3, "map", {0});
+ _matching_elements.add_matching_elements(4, "map", {1});
+}
struct AttributeCombinerTest : public ::testing::Test
{
@@ -173,7 +193,7 @@ struct AttributeCombinerTest : public ::testing::Test
AttributeCombinerTest();
~AttributeCombinerTest();
- void set_field_name(const vespalib::string &field_name);
+ void set_field(const vespalib::string &field_name, bool filter_elements);
void assertWritten(const vespalib::string &exp, uint32_t docId);
};
@@ -189,9 +209,9 @@ AttributeCombinerTest::AttributeCombinerTest()
AttributeCombinerTest::~AttributeCombinerTest() = default;
void
-AttributeCombinerTest::set_field_name(const vespalib::string &field_name)
+AttributeCombinerTest::set_field(const vespalib::string &field_name, bool filter_elements)
{
- writer = AttributeCombinerDFW::create(field_name, attrs.mgr);
+ writer = AttributeCombinerDFW::create(field_name, attrs.mgr, filter_elements);
EXPECT_TRUE(writer->setFieldWriterStateIndex(0));
state._fieldWriterStates.resize(1);
}
@@ -219,7 +239,7 @@ AttributeCombinerTest::assertWritten(const vespalib::string &expectedJson, uint3
TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_array_of_struct)
{
- set_field_name("array");
+ set_field("array", false);
assertWritten("[ { fval: 110.0, name: \"n1.1\", val: 10}, { name: \"n1.2\", val: 11}]", 1);
assertWritten("[ { fval: 120.0, name: \"n2\", val: 20}, { fval: 121.0, val: 21 }]", 2);
assertWritten("[ { fval: 130.0, name: \"n3.1\", val: 30}, { fval: 131.0, name: \"n3.2\"} ]", 3);
@@ -229,7 +249,7 @@ TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_corr
TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_map_of_struct)
{
- set_field_name("smap");
+ set_field("smap", false);
assertWritten("[ { key: \"k1.1\", value: { fval: 110.0, name: \"n1.1\", val: 10} }, { key: \"k1.2\", value: { name: \"n1.2\", val: 11} }]", 1);
assertWritten("[ { key: \"k2\", value: { fval: 120.0, name: \"n2\", val: 20} }, { value: { fval: 121.0, val: 21 } }]", 2);
assertWritten("[ { key: \"k3.1\", value: { fval: 130.0, name: \"n3.1\", val: 30} }, { key: \"k3.2\", value: { fval: 131.0, name: \"n3.2\"} } ]", 3);
@@ -239,7 +259,7 @@ TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_corr
TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_map_of_string)
{
- set_field_name("map");
+ set_field("map", false);
assertWritten("[ { key: \"k1.1\", value: \"n1.1\" }, { key: \"k1.2\", value: \"n1.2\"}]", 1);
assertWritten("[ { key: \"k2\"}]", 2);
assertWritten("[ { key: \"k3.1\", value: \"n3.1\" }, { value: \"n3.2\"} ]", 3);
@@ -247,6 +267,36 @@ TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_corr
assertWritten("null", 5);
}
+TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_filtered_array_of_struct)
+{
+ set_field("array", true);
+ assertWritten("[ { name: \"n1.2\", val: 11}]", 1);
+ assertWritten("[ ]", 2);
+ assertWritten("[ { fval: 130.0, name: \"n3.1\", val: 30} ]", 3);
+ assertWritten("[ { fval: 141.0, name: \"n4.2\", val: 41} ]", 4);
+ assertWritten("null", 5);
+}
+
+TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_filtered_map_of_struct)
+{
+ set_field("smap", true);
+ assertWritten("[ { key: \"k1.2\", value: { name: \"n1.2\", val: 11} }]", 1);
+ assertWritten("[ ]", 2);
+ assertWritten("[ { key: \"k3.1\", value: { fval: 130.0, name: \"n3.1\", val: 30} } ]", 3);
+ assertWritten("[ { key: \"k4.2\", value: { fval: 141.0, name: \"n4.2\", val: 41} } ]", 4);
+ assertWritten("null", 5);
+}
+
+TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_filtered_map_of_string)
+{
+ set_field("map", true);
+ assertWritten("[ { key: \"k1.2\", value: \"n1.2\"}]", 1);
+ assertWritten("[ ]", 2);
+ assertWritten("[ { key: \"k3.1\", value: \"n3.1\" } ]", 3);
+ assertWritten("[ { key: \"k4.2\", value: \"n4.2\" } ]", 4);
+ assertWritten("null", 5);
+}
+
}
GTEST_MAIN_RUN_ALL_TESTS()