diff options
Diffstat (limited to 'icing/index/lite/lite-index_test.cc')
-rw-r--r-- | icing/index/lite/lite-index_test.cc | 52 |
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 |