aboutsummaryrefslogtreecommitdiff
path: root/icing/index/lite/lite-index_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'icing/index/lite/lite-index_test.cc')
-rw-r--r--icing/index/lite/lite-index_test.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/icing/index/lite/lite-index_test.cc b/icing/index/lite/lite-index_test.cc
index 825f830..12d5f42 100644
--- a/icing/index/lite/lite-index_test.cc
+++ b/icing/index/lite/lite-index_test.cc
@@ -18,6 +18,7 @@
#include "gmock/gmock.h"
#include "gtest/gtest.h"
+#include "icing/index/lite/doc-hit-info-iterator-term-lite.h"
#include "icing/index/term-id-codec.h"
#include "icing/legacy/index/icing-mock-filesystem.h"
#include "icing/schema/section.h"
@@ -30,6 +31,7 @@ namespace lib {
namespace {
+using ::testing::ElementsAreArray;
using ::testing::Eq;
using ::testing::IsEmpty;
using ::testing::SizeIs;
@@ -105,6 +107,56 @@ TEST_F(LiteIndexTest, LiteIndexAppendHits) {
EXPECT_THAT(hits2, IsEmpty());
}
+TEST_F(LiteIndexTest, LiteIndexIterator) {
+ const std::string term = "foo";
+ ICING_ASSERT_OK_AND_ASSIGN(
+ uint32_t tvi,
+ lite_index_->InsertTerm(term, TermMatchType::PREFIX, kNamespace0));
+ ICING_ASSERT_OK_AND_ASSIGN(uint32_t foo_term_id,
+ term_id_codec_->EncodeTvi(tvi, TviType::LITE));
+ Hit doc_hit0(/*section_id=*/0, /*document_id=*/0, 3,
+ /*is_in_prefix_section=*/false);
+ Hit doc_hit1(/*section_id=*/1, /*document_id=*/0, 5,
+ /*is_in_prefix_section=*/false);
+ Hit::TermFrequencyArray doc0_term_frequencies{3, 5};
+ Hit doc_hit2(/*section_id=*/1, /*document_id=*/1, 7,
+ /*is_in_prefix_section=*/false);
+ Hit doc_hit3(/*section_id=*/2, /*document_id=*/1, 11,
+ /*is_in_prefix_section=*/false);
+ Hit::TermFrequencyArray doc1_term_frequencies{0, 7, 11};
+ ICING_ASSERT_OK(lite_index_->AddHit(foo_term_id, doc_hit0));
+ ICING_ASSERT_OK(lite_index_->AddHit(foo_term_id, doc_hit1));
+ ICING_ASSERT_OK(lite_index_->AddHit(foo_term_id, doc_hit2));
+ ICING_ASSERT_OK(lite_index_->AddHit(foo_term_id, doc_hit3));
+
+ std::unique_ptr<DocHitInfoIteratorTermLiteExact> iter =
+ std::make_unique<DocHitInfoIteratorTermLiteExact>(
+ term_id_codec_.get(), lite_index_.get(), term, kSectionIdMaskAll,
+ /*need_hit_term_frequency=*/true);
+
+ ASSERT_THAT(iter->Advance(), IsOk());
+ EXPECT_THAT(iter->doc_hit_info().document_id(), Eq(1));
+ EXPECT_THAT(iter->doc_hit_info().hit_section_ids_mask(), Eq(0b110));
+ std::vector<TermMatchInfo> matched_terms_stats;
+ iter->PopulateMatchedTermsStats(&matched_terms_stats);
+ ASSERT_THAT(matched_terms_stats, SizeIs(1));
+ EXPECT_EQ(matched_terms_stats.at(0).term, term);
+ EXPECT_EQ(matched_terms_stats.at(0).section_ids_mask, 0b110);
+ EXPECT_THAT(matched_terms_stats.at(0).term_frequencies,
+ ElementsAreArray(doc1_term_frequencies));
+
+ ASSERT_THAT(iter->Advance(), IsOk());
+ EXPECT_THAT(iter->doc_hit_info().document_id(), Eq(0));
+ EXPECT_THAT(iter->doc_hit_info().hit_section_ids_mask(), Eq(0b11));
+ matched_terms_stats.clear();
+ iter->PopulateMatchedTermsStats(&matched_terms_stats);
+ ASSERT_THAT(matched_terms_stats, SizeIs(1));
+ EXPECT_EQ(matched_terms_stats.at(0).term, term);
+ EXPECT_EQ(matched_terms_stats.at(0).section_ids_mask, 0b11);
+ EXPECT_THAT(matched_terms_stats.at(0).term_frequencies,
+ ElementsAreArray(doc0_term_frequencies));
+}
+
} // namespace
} // namespace lib
} // namespace icing