summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp')
-rw-r--r--searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp48
1 files changed, 33 insertions, 15 deletions
diff --git a/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp b/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp
index 5c73a60f6ef..a9c6cd1fd6c 100644
--- a/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp
+++ b/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp
@@ -105,6 +105,22 @@ StringAttributeTest::testMultiValue()
}
+namespace {
+
+template <typename T0, typename T1>
+auto zipped_and_sorted_by_first(const std::vector<T0>& a, const std::vector<T1>& b) -> std::vector<std::pair<T0, T1>> {
+ std::vector<std::pair<T0, T1>> combined;
+ assert(a.size() == b.size());
+ for (size_t i = 0; i < a.size(); ++i) {
+ combined.emplace_back(a[i], b[i]);
+ }
+ std::sort(combined.begin(), combined.end(), [](const auto& lhs, const auto& rhs){
+ return (lhs.first < rhs.first);
+ });
+ return combined;
+}
+
+}
template <typename Attribute>
void
@@ -118,14 +134,16 @@ StringAttributeTest::testMultiValue(Attribute & attr, uint32_t numDocs)
for (uint32_t i = 0; i < numDocs - 1; ++i) {
char unique[16];
sprintf(unique, i < 10 ? "enum0%u" : "enum%u", i);
- uniqueStrings.push_back(vespalib::string(unique));
+ uniqueStrings.emplace_back(unique);
}
+ ASSERT_TRUE(std::is_sorted(uniqueStrings.begin(), uniqueStrings.end()));
+
std::vector<vespalib::string> newUniques;
newUniques.reserve(numDocs - 1);
for (uint32_t i = 0; i < numDocs - 1; ++i) {
char unique[16];
sprintf(unique, i < 10 ? "unique0%u" : "unique%u", i);
- newUniques.push_back(vespalib::string(unique));
+ newUniques.emplace_back(unique);
}
// add docs
@@ -147,10 +165,10 @@ StringAttributeTest::testMultiValue(Attribute & attr, uint32_t numDocs)
// test get first
if (valueCount == 0) {
- EXPECT_TRUE(attr.get(doc) == NULL);
+ EXPECT_TRUE(attr.get(doc) == nullptr);
EXPECT_TRUE(attr.getEnum(doc) == std::numeric_limits<uint32_t>::max());
- } else {
- EXPECT_TRUE(strcmp(attr.get(doc), uniqueStrings[0].c_str()) == 0);
+ } else if (!attr.hasWeightedSetType()) {
+ EXPECT_EQUAL(vespalib::string(attr.get(doc)), uniqueStrings[0]);
uint32_t e;
EXPECT_TRUE(attr.findEnum(uniqueStrings[0].c_str(), e));
EXPECT_EQUAL(1u, attr.findFoldedEnums(uniqueStrings[0].c_str()).size());
@@ -160,17 +178,17 @@ StringAttributeTest::testMultiValue(Attribute & attr, uint32_t numDocs)
// test get all
std::vector<vespalib::string> values(valueCount);
- EXPECT_TRUE(attr.get(doc, &values[0], valueCount) == valueCount);
+ ASSERT_TRUE(attr.get(doc, &values[0], valueCount) == valueCount);
std::vector<uint32_t> enums(valueCount);
- EXPECT_TRUE((static_cast<search::attribute::IAttributeVector &>(attr)).get(doc, &enums[0], valueCount) == valueCount);
+ ASSERT_TRUE((static_cast<search::attribute::IAttributeVector &>(attr)).get(doc, &enums[0], valueCount) == valueCount);
+ auto combined = zipped_and_sorted_by_first(values, enums);
for (uint32_t j = 0; j < valueCount; ++j) {
- //LOG(info, "doc[%u][%u] = %s", doc, j, values[j].c_str());
- EXPECT_TRUE(values[j] == uniqueStrings[j]);
+ EXPECT_TRUE(combined[j].first == uniqueStrings[j]);
uint32_t e = 100;
- EXPECT_TRUE(attr.findEnum(values[j].c_str(), e));
- EXPECT_TRUE(enums[j] == e);
+ EXPECT_TRUE(attr.findEnum(combined[j].first.c_str(), e));
+ EXPECT_TRUE(combined[j].second == e);
}
}
@@ -207,12 +225,12 @@ StringAttributeTest::testMultiValue(Attribute & attr, uint32_t numDocs)
std::vector<uint32_t> enums(valueCount);
EXPECT_TRUE((static_cast<search::attribute::IAttributeVector &>(attr)).get(doc, &enums[0], valueCount) == valueCount);
+ auto combined = zipped_and_sorted_by_first(values, enums);
for (uint32_t j = 0; j < valueCount; ++j) {
- //LOG(info, "doc[%u][%u] = %s", doc, j, values[j].c_str());
- EXPECT_TRUE(values[j] == newUniques[j]);
+ EXPECT_TRUE(combined[j].first == newUniques[j]);
uint32_t e = 100;
- EXPECT_TRUE(attr.findEnum(values[j].c_str(), e));
- EXPECT_TRUE(enums[j] == e);
+ EXPECT_TRUE(attr.findEnum(combined[j].first.c_str(), e));
+ EXPECT_TRUE(combined[j].second == e);
}
}