• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (C) 2022 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "icing/scoring/scored-document-hit.h"
16 
17 #include <cstdint>
18 #include <utility>
19 #include <vector>
20 
21 #include "gmock/gmock.h"
22 #include "gtest/gtest.h"
23 #include "icing/testing/common-matchers.h"
24 
25 namespace icing {
26 namespace lib {
27 
28 namespace {
29 
30 using ::testing::DoubleEq;
31 using ::testing::IsEmpty;
32 
TEST(ScoredDocumentHitTest,ScoredDocumentHitConvertToJoinedScoredDocumentHit)33 TEST(ScoredDocumentHitTest, ScoredDocumentHitConvertToJoinedScoredDocumentHit) {
34   ScoredDocumentHit::Converter converter;
35 
36   double score = 2.0;
37   ScoredDocumentHit scored_document_hit(/*document_id=*/5,
38                                         /*section_id_mask=*/49, score);
39 
40   JoinedScoredDocumentHit joined_scored_document_hit =
41       converter(ScoredDocumentHit(scored_document_hit));
42   EXPECT_THAT(joined_scored_document_hit.final_score(), DoubleEq(score));
43   EXPECT_THAT(joined_scored_document_hit.parent_scored_document_hit(),
44               EqualsScoredDocumentHit(scored_document_hit));
45   EXPECT_THAT(joined_scored_document_hit.child_scored_document_hits(),
46               IsEmpty());
47 }
48 
TEST(ScoredDocumentHitTest,JoinedScoredDocumentHitConvertToJoinedScoredDocumentHit)49 TEST(ScoredDocumentHitTest,
50      JoinedScoredDocumentHitConvertToJoinedScoredDocumentHit) {
51   JoinedScoredDocumentHit::Converter converter;
52 
53   ScoredDocumentHit parent_scored_document_hit(/*document_id=*/5,
54                                                /*section_id_mask=*/49,
55                                                /*score=*/1.0);
56   std::vector<ScoredDocumentHit> child_scored_document_hits{
57       ScoredDocumentHit(/*document_id=*/1,
58                         /*section_id_mask=*/1,
59                         /*score=*/2.0),
60       ScoredDocumentHit(/*document_id=*/2,
61                         /*section_id_mask=*/2,
62                         /*score=*/3.0),
63       ScoredDocumentHit(/*document_id=*/3,
64                         /*section_id_mask=*/3,
65                         /*score=*/4.0)};
66 
67   JoinedScoredDocumentHit joined_scored_document_hit(
68       /*final_score=*/12345.6789, std::move(parent_scored_document_hit),
69       std::move(child_scored_document_hits));
70   EXPECT_THAT(converter(JoinedScoredDocumentHit(joined_scored_document_hit)),
71               EqualsJoinedScoredDocumentHit(joined_scored_document_hit));
72 }
73 
TEST(ScoredDocumentHitTest,Copyable)74 TEST(ScoredDocumentHitTest, Copyable) {
75   ScoredDocumentHit hit1(/*document_id=*/5,
76                          /*section_id_mask=*/49,
77                          /*score=*/1.0, /*additional_scores=*/{0, 1, 2});
78 
79   ScoredDocumentHit hit2(/*document_id=*/6,
80                          /*section_id_mask=*/50,
81                          /*score=*/2.0, /*additional_scores=*/{3, 4, 5});
82 
83   // Copy constructor
84   ScoredDocumentHit copy = hit1;
85   EXPECT_THAT(copy, EqualsScoredDocumentHit(ScoredDocumentHit(
86                         /*document_id=*/5,
87                         /*section_id_mask=*/49,
88                         /*score=*/1.0, /*additional_scores=*/{0, 1, 2})));
89 
90   // Copy assignment
91   copy = hit2;
92   EXPECT_THAT(copy, EqualsScoredDocumentHit(ScoredDocumentHit(
93                         /*document_id=*/6,
94                         /*section_id_mask=*/50,
95                         /*score=*/2.0, /*additional_scores=*/{3, 4, 5})));
96 }
97 
TEST(ScoredDocumentHitTest,Movable)98 TEST(ScoredDocumentHitTest, Movable) {
99   ScoredDocumentHit hit1(/*document_id=*/5,
100                          /*section_id_mask=*/49,
101                          /*score=*/1.0, /*additional_scores=*/{0, 1, 2});
102   ScoredDocumentHit hit1_copy = hit1;
103 
104   ScoredDocumentHit hit2(/*document_id=*/6,
105                          /*section_id_mask=*/50,
106                          /*score=*/2.0, /*additional_scores=*/{3, 4, 5});
107   ScoredDocumentHit hit2_copy = hit2;
108 
109   // Move constructor
110   ScoredDocumentHit moved = std::move(hit1);
111   EXPECT_THAT(moved, EqualsScoredDocumentHit(hit1_copy));
112 
113   // Move assignment
114   moved = std::move(hit2);
115   EXPECT_THAT(moved, EqualsScoredDocumentHit(hit2_copy));
116 }
117 
TEST(ScoredDocumentHitTest,Swapable)118 TEST(ScoredDocumentHitTest, Swapable) {
119   ScoredDocumentHit hit1(/*document_id=*/5,
120                          /*section_id_mask=*/49,
121                          /*score=*/1.0, /*additional_scores=*/{0, 1, 2});
122   ScoredDocumentHit hit1_copy = hit1;
123 
124   ScoredDocumentHit hit2(/*document_id=*/6,
125                          /*section_id_mask=*/50,
126                          /*score=*/2.0, /*additional_scores=*/{3, 4, 5});
127   ScoredDocumentHit hit2_copy = hit2;
128 
129   std::swap(hit1, hit2);
130   EXPECT_THAT(hit1, EqualsScoredDocumentHit(hit2_copy));
131   EXPECT_THAT(hit2, EqualsScoredDocumentHit(hit1_copy));
132 }
133 
134 }  // namespace
135 
136 }  // namespace lib
137 }  // namespace icing
138