• 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 #ifndef ICING_SCORING_SCORER_TEST_UTILS_H_
16 #define ICING_SCORING_SCORER_TEST_UTILS_H_
17 
18 #include "icing/proto/scoring.pb.h"
19 
20 namespace icing {
21 namespace lib {
22 
23 enum class ScorerTestingMode { kNormal, kAdvanced };
24 
CreateScoringSpecForRankingStrategy(ScoringSpecProto::RankingStrategy::Code ranking_strategy,ScorerTestingMode testing_mode)25 inline ScoringSpecProto CreateScoringSpecForRankingStrategy(
26     ScoringSpecProto::RankingStrategy::Code ranking_strategy,
27     ScorerTestingMode testing_mode) {
28   ScoringSpecProto scoring_spec;
29   if (testing_mode != ScorerTestingMode::kAdvanced) {
30     scoring_spec.set_rank_by(ranking_strategy);
31     return scoring_spec;
32   }
33   scoring_spec.set_rank_by(
34       ScoringSpecProto::RankingStrategy::ADVANCED_SCORING_EXPRESSION);
35   switch (ranking_strategy) {
36     case ScoringSpecProto::RankingStrategy::DOCUMENT_SCORE:
37       scoring_spec.set_advanced_scoring_expression("this.documentScore()");
38       return scoring_spec;
39     case ScoringSpecProto::RankingStrategy::CREATION_TIMESTAMP:
40       scoring_spec.set_advanced_scoring_expression("this.creationTimestamp()");
41       return scoring_spec;
42     case ScoringSpecProto::RankingStrategy::USAGE_TYPE1_COUNT:
43       scoring_spec.set_advanced_scoring_expression("this.usageCount(1)");
44       return scoring_spec;
45     case ScoringSpecProto::RankingStrategy::USAGE_TYPE2_COUNT:
46       scoring_spec.set_advanced_scoring_expression("this.usageCount(2)");
47       return scoring_spec;
48     case ScoringSpecProto::RankingStrategy::USAGE_TYPE3_COUNT:
49       scoring_spec.set_advanced_scoring_expression("this.usageCount(3)");
50       return scoring_spec;
51     case ScoringSpecProto::RankingStrategy::USAGE_TYPE1_LAST_USED_TIMESTAMP:
52       scoring_spec.set_advanced_scoring_expression(
53           "this.usageLastUsedTimestamp(1)");
54       return scoring_spec;
55     case ScoringSpecProto::RankingStrategy::USAGE_TYPE2_LAST_USED_TIMESTAMP:
56       scoring_spec.set_advanced_scoring_expression(
57           "this.usageLastUsedTimestamp(2)");
58       return scoring_spec;
59     case ScoringSpecProto::RankingStrategy::USAGE_TYPE3_LAST_USED_TIMESTAMP:
60       scoring_spec.set_advanced_scoring_expression(
61           "this.usageLastUsedTimestamp(3)");
62       return scoring_spec;
63     case ScoringSpecProto::RankingStrategy::RELEVANCE_SCORE:
64       scoring_spec.set_advanced_scoring_expression("this.relevanceScore()");
65       return scoring_spec;
66     case ScoringSpecProto::RankingStrategy::NONE:
67     case ScoringSpecProto::RankingStrategy::JOIN_AGGREGATE_SCORE:
68     case ScoringSpecProto::RankingStrategy::ADVANCED_SCORING_EXPRESSION:
69       scoring_spec.set_rank_by(ranking_strategy);
70       return scoring_spec;
71   }
72 }
73 
74 }  // namespace lib
75 }  // namespace icing
76 
77 #endif  // ICING_SCORING_SCORER_TEST_UTILS_H_
78