aboutsummaryrefslogtreecommitdiff
path: root/icing/index/hit/hit_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'icing/index/hit/hit_test.cc')
-rw-r--r--icing/index/hit/hit_test.cc156
1 files changed, 124 insertions, 32 deletions
diff --git a/icing/index/hit/hit_test.cc b/icing/index/hit/hit_test.cc
index 0086d91..1233e00 100644
--- a/icing/index/hit/hit_test.cc
+++ b/icing/index/hit/hit_test.cc
@@ -14,6 +14,9 @@
#include "icing/index/hit/hit.h"
+#include <algorithm>
+#include <vector>
+
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "icing/schema/section.h"
@@ -94,77 +97,127 @@ TEST(BasicHitTest, Comparison) {
}
TEST(HitTest, HasTermFrequencyFlag) {
- Hit h1(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency);
+ Hit h1(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
EXPECT_THAT(h1.has_term_frequency(), IsFalse());
EXPECT_THAT(h1.term_frequency(), Eq(Hit::kDefaultTermFrequency));
- Hit h2(kSomeSectionid, kSomeDocumentId, kSomeTermFrequency);
+ Hit h2(kSomeSectionid, kSomeDocumentId, kSomeTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
EXPECT_THAT(h2.has_term_frequency(), IsTrue());
EXPECT_THAT(h2.term_frequency(), Eq(kSomeTermFrequency));
}
TEST(HitTest, IsPrefixHitFlag) {
- Hit h1(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency);
+ Hit h1(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
EXPECT_THAT(h1.is_prefix_hit(), IsFalse());
Hit h2(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
- /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
+ /*is_in_prefix_section=*/true, /*is_prefix_hit=*/false);
EXPECT_THAT(h2.is_prefix_hit(), IsFalse());
Hit h3(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
/*is_in_prefix_section=*/false, /*is_prefix_hit=*/true);
EXPECT_THAT(h3.is_prefix_hit(), IsTrue());
+
+ Hit h4(kSomeSectionid, kSomeDocumentId, kSomeTermFrequency,
+ /*is_in_prefix_section=*/true, /*is_prefix_hit=*/false);
+ EXPECT_THAT(h4.is_prefix_hit(), IsFalse());
}
TEST(HitTest, IsInPrefixSectionFlag) {
- Hit h1(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency);
+ Hit h1(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
EXPECT_THAT(h1.is_in_prefix_section(), IsFalse());
Hit h2(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
- /*is_in_prefix_section=*/false);
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
EXPECT_THAT(h2.is_in_prefix_section(), IsFalse());
Hit h3(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
- /*is_in_prefix_section=*/true);
+ /*is_in_prefix_section=*/true, /*is_prefix_hit=*/false);
EXPECT_THAT(h3.is_in_prefix_section(), IsTrue());
}
+TEST(HitTest, HasFlags) {
+ Hit h1(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
+ EXPECT_THAT(h1.has_flags(), IsFalse());
+
+ Hit h2(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/true);
+ EXPECT_THAT(h2.has_flags(), IsFalse());
+
+ Hit h3(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/true, /*is_prefix_hit=*/false);
+ EXPECT_THAT(h3.has_flags(), IsFalse());
+
+ Hit h4(kSomeSectionid, kSomeDocumentId, kSomeTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
+ EXPECT_THAT(h4.has_flags(), IsTrue());
+
+ Hit h5(kSomeSectionid, kSomeDocumentId, kSomeTermFrequency,
+ /*is_prefix_hit=*/true, /*is_in_prefix_section=*/true);
+ EXPECT_THAT(h5.has_flags(), IsTrue());
+
+ Hit h6(kSomeSectionid, kSomeDocumentId, kSomeTermFrequency,
+ /*is_prefix_hit=*/false, /*is_in_prefix_section=*/true);
+ EXPECT_THAT(h6.has_flags(), IsTrue());
+
+ Hit h7(kSomeSectionid, kSomeDocumentId, kSomeTermFrequency,
+ /*is_prefix_hit=*/true, /*is_in_prefix_section=*/false);
+ EXPECT_THAT(h7.has_flags(), IsTrue());
+}
+
TEST(HitTest, Accessors) {
- Hit h1(kSomeSectionid, kSomeDocumentId, Hit::kDefaultTermFrequency);
+ Hit h1(kSomeSectionid, kSomeDocumentId, kSomeTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/true);
EXPECT_THAT(h1.document_id(), Eq(kSomeDocumentId));
EXPECT_THAT(h1.section_id(), Eq(kSomeSectionid));
+ EXPECT_THAT(h1.term_frequency(), Eq(kSomeTermFrequency));
+ EXPECT_THAT(h1.is_in_prefix_section(), IsFalse());
+ EXPECT_THAT(h1.is_prefix_hit(), IsTrue());
}
TEST(HitTest, Valid) {
- Hit def;
+ Hit def(Hit::kInvalidValue);
EXPECT_THAT(def.is_valid(), IsFalse());
-
- Hit explicit_invalid(Hit::kInvalidValue);
+ Hit explicit_invalid(Hit::kInvalidValue, Hit::kNoEnabledFlags,
+ Hit::kDefaultTermFrequency);
EXPECT_THAT(explicit_invalid.is_valid(), IsFalse());
static constexpr Hit::Value kSomeValue = 65372;
- Hit explicit_valid(kSomeValue);
+ Hit explicit_valid(kSomeValue, Hit::kNoEnabledFlags,
+ Hit::kDefaultTermFrequency);
EXPECT_THAT(explicit_valid.is_valid(), IsTrue());
- Hit maximum_document_id_hit(kSomeSectionid, kMaxDocumentId,
- kSomeTermFrequency);
+ Hit maximum_document_id_hit(
+ kSomeSectionid, kMaxDocumentId, kSomeTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
EXPECT_THAT(maximum_document_id_hit.is_valid(), IsTrue());
- Hit maximum_section_id_hit(kMaxSectionId, kSomeDocumentId,
- kSomeTermFrequency);
+ Hit maximum_section_id_hit(kMaxSectionId, kSomeDocumentId, kSomeTermFrequency,
+ /*is_in_prefix_section=*/false,
+ /*is_prefix_hit=*/false);
EXPECT_THAT(maximum_section_id_hit.is_valid(), IsTrue());
- Hit minimum_document_id_hit(kSomeSectionid, 0, kSomeTermFrequency);
+ Hit minimum_document_id_hit(kSomeSectionid, 0, kSomeTermFrequency,
+ /*is_in_prefix_section=*/false,
+ /*is_prefix_hit=*/false);
EXPECT_THAT(minimum_document_id_hit.is_valid(), IsTrue());
- Hit minimum_section_id_hit(0, kSomeDocumentId, kSomeTermFrequency);
+ Hit minimum_section_id_hit(0, kSomeDocumentId, kSomeTermFrequency,
+ /*is_in_prefix_section=*/false,
+ /*is_prefix_hit=*/false);
EXPECT_THAT(minimum_section_id_hit.is_valid(), IsTrue());
- // We use Hit with value Hit::kMaxDocumentIdSortValue for std::lower_bound in
- // the lite index. Verify that the value of the smallest valid Hit (which
+ // We use Hit with value Hit::kMaxDocumentIdSortValue for std::lower_bound
+ // in the lite index. Verify that the value of the smallest valid Hit (which
// contains kMinSectionId, kMaxDocumentId and 3 flags = false) is >=
// Hit::kMaxDocumentIdSortValue.
- Hit smallest_hit(kMinSectionId, kMaxDocumentId, Hit::kDefaultTermFrequency);
+ Hit smallest_hit(kMinSectionId, kMaxDocumentId, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
ASSERT_THAT(smallest_hit.is_valid(), IsTrue());
ASSERT_THAT(smallest_hit.has_term_frequency(), IsFalse());
ASSERT_THAT(smallest_hit.is_prefix_hit(), IsFalse());
@@ -173,39 +226,78 @@ TEST(HitTest, Valid) {
}
TEST(HitTest, Comparison) {
- Hit hit(1, 243, Hit::kDefaultTermFrequency);
+ Hit hit(/*section_id=*/1, /*document_id=*/243, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
// DocumentIds are sorted in ascending order. So a hit with a lower
// document_id should be considered greater than one with a higher
// document_id.
- Hit higher_document_id_hit(1, 2409, Hit::kDefaultTermFrequency);
- Hit higher_section_id_hit(15, 243, Hit::kDefaultTermFrequency);
+ Hit higher_document_id_hit(
+ /*section_id=*/1, /*document_id=*/2409, Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false, /*is_prefix_hit=*/false);
+ Hit higher_section_id_hit(/*section_id=*/15, /*document_id=*/243,
+ Hit::kDefaultTermFrequency,
+ /*is_in_prefix_section=*/false,
+ /*is_prefix_hit=*/false);
// Whether or not a term frequency was set is considered, but the term
// frequency itself is not.
- Hit term_frequency_hit(1, 243, 12);
- Hit prefix_hit(1, 243, Hit::kDefaultTermFrequency,
+ Hit term_frequency_hit(/*section_id=*/1, 243, /*term_frequency=*/12,
+ /*is_in_prefix_section=*/false,
+ /*is_prefix_hit=*/false);
+ Hit prefix_hit(/*section_id=*/1, 243, Hit::kDefaultTermFrequency,
/*is_in_prefix_section=*/false,
/*is_prefix_hit=*/true);
- Hit hit_in_prefix_section(1, 243, Hit::kDefaultTermFrequency,
+ Hit hit_in_prefix_section(/*section_id=*/1, 243, Hit::kDefaultTermFrequency,
/*is_in_prefix_section=*/true,
/*is_prefix_hit=*/false);
+ Hit hit_with_all_flags_enabled(/*section_id=*/1, 243, 56,
+ /*is_in_prefix_section=*/true,
+ /*is_prefix_hit=*/true);
std::vector<Hit> hits{hit,
higher_document_id_hit,
higher_section_id_hit,
term_frequency_hit,
prefix_hit,
- hit_in_prefix_section};
+ hit_in_prefix_section,
+ hit_with_all_flags_enabled};
std::sort(hits.begin(), hits.end());
- EXPECT_THAT(
- hits, ElementsAre(higher_document_id_hit, hit, hit_in_prefix_section,
- prefix_hit, term_frequency_hit, higher_section_id_hit));
+ EXPECT_THAT(hits,
+ ElementsAre(higher_document_id_hit, hit, term_frequency_hit,
+ hit_in_prefix_section, prefix_hit,
+ hit_with_all_flags_enabled, higher_section_id_hit));
- Hit higher_term_frequency_hit(1, 243, 108);
+ Hit higher_term_frequency_hit(/*section_id=*/1, 243, /*term_frequency=*/108,
+ /*is_in_prefix_section=*/false,
+ /*is_prefix_hit=*/false);
// The term frequency value is not considered when comparing hits.
EXPECT_THAT(term_frequency_hit, Not(Lt(higher_term_frequency_hit)));
EXPECT_THAT(higher_term_frequency_hit, Not(Lt(term_frequency_hit)));
}
+TEST(HitTest, CheckFlagsAreConsistent) {
+ Hit::Value value_without_flags = 1 << 30;
+ Hit::Value value_with_flags = value_without_flags + 1;
+ Hit::Flags flags_with_term_freq = 1;
+
+ Hit consistent_hit_no_flags(value_without_flags, Hit::kNoEnabledFlags,
+ Hit::kDefaultTermFrequency);
+ Hit consistent_hit_with_term_frequency(value_with_flags, flags_with_term_freq,
+ kSomeTermFrequency);
+ EXPECT_THAT(consistent_hit_no_flags.CheckFlagsAreConsistent(), IsTrue());
+ EXPECT_THAT(consistent_hit_with_term_frequency.CheckFlagsAreConsistent(),
+ IsTrue());
+
+ Hit inconsistent_hit_1(value_with_flags, Hit::kNoEnabledFlags,
+ Hit::kDefaultTermFrequency);
+ Hit inconsistent_hit_2(value_with_flags, Hit::kNoEnabledFlags,
+ kSomeTermFrequency);
+ Hit inconsistent_hit_3(value_with_flags, flags_with_term_freq,
+ Hit::kDefaultTermFrequency);
+ EXPECT_THAT(inconsistent_hit_1.CheckFlagsAreConsistent(), IsFalse());
+ EXPECT_THAT(inconsistent_hit_2.CheckFlagsAreConsistent(), IsFalse());
+ EXPECT_THAT(inconsistent_hit_3.CheckFlagsAreConsistent(), IsFalse());
+}
+
} // namespace
} // namespace lib