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)25inline 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