@@ -152,6 +152,46 @@ def test_from_dict(self):
152152 new_evaluator = default_from_dict (DocumentRecallEvaluator , data )
153153 assert new_evaluator .mode == RecallMode .SINGLE_HIT
154154
155+ def test_empty_ground_truth_documents (self , evaluator ):
156+ ground_truth_documents = [[]]
157+ retrieved_documents = [[Document (content = "test" )]]
158+ score = evaluator .run (ground_truth_documents , retrieved_documents )
159+ assert score == {"individual_scores" : [0.0 ], "score" : 0.0 }
160+
161+ def test_empty_retrieved_documents (self , evaluator ):
162+ ground_truth_documents = [[Document (content = "test" )]]
163+ retrieved_documents = [[]]
164+ score = evaluator .run (ground_truth_documents , retrieved_documents )
165+ assert score == {"individual_scores" : [0.0 ], "score" : 0.0 }
166+
167+ def test_empty_string_ground_truth_documents (self , evaluator ):
168+ ground_truth_documents = [[Document (content = "" )]]
169+ retrieved_documents = [[Document (content = "test" )]]
170+ score = evaluator .run (ground_truth_documents , retrieved_documents )
171+ assert score == {"individual_scores" : [0.0 ], "score" : 0.0 }
172+
173+ def test_empty_string_retrieved_documents (self , evaluator ):
174+ ground_truth_documents = [[Document (content = "test" )]]
175+ retrieved_documents = [[Document (content = "" )]]
176+ score = evaluator .run (ground_truth_documents , retrieved_documents )
177+ assert score == {"individual_scores" : [0.0 ], "score" : 0.0 }
178+
179+ def test_no_match_when_comparison_field_missing_on_all_documents (self ):
180+ evaluator = DocumentRecallEvaluator (mode = RecallMode .SINGLE_HIT , document_comparison_field = "meta.file_id" )
181+ result = evaluator .run (
182+ ground_truth_documents = [[Document (content = "real ground truth" )]],
183+ retrieved_documents = [[Document (content = "totally unrelated doc" )]],
184+ )
185+ assert result == {"individual_scores" : [0.0 ], "score" : 0.0 }
186+
187+ def test_no_match_when_comparison_field_missing_on_some_documents (self ):
188+ evaluator = DocumentRecallEvaluator (mode = RecallMode .SINGLE_HIT , document_comparison_field = "meta.file_id" )
189+ result = evaluator .run (
190+ ground_truth_documents = [[Document (meta = {"file_id" : "f1" }), Document (content = "no file_id" )]],
191+ retrieved_documents = [[Document (content = "also no file_id" ), Document (meta = {"file_id" : "f2" })]],
192+ )
193+ assert result == {"individual_scores" : [0.0 ], "score" : 0.0 }
194+
155195
156196class TestDocumentRecallEvaluatorMultiHit :
157197 @pytest .fixture
@@ -265,3 +305,19 @@ def test_empty_string_retrieved_documents(self, evaluator):
265305 retrieved_documents = [[Document (content = "" )]]
266306 score = evaluator .run (ground_truth_documents , retrieved_documents )
267307 assert score == {"individual_scores" : [0.0 ], "score" : 0.0 }
308+
309+ def test_no_match_when_comparison_field_missing_on_some_documents (self ):
310+ evaluator = DocumentRecallEvaluator (mode = RecallMode .MULTI_HIT , document_comparison_field = "meta.file_id" )
311+ result = evaluator .run (
312+ ground_truth_documents = [[Document (meta = {"file_id" : "f1" }), Document (content = "no file_id" )]],
313+ retrieved_documents = [[Document (content = "also no file_id" ), Document (meta = {"file_id" : "f2" })]],
314+ )
315+ assert result == {"individual_scores" : [0.0 ], "score" : 0.0 }
316+
317+ def test_ground_truth_missing_comparison_field_excluded_from_denominator (self ):
318+ evaluator = DocumentRecallEvaluator (mode = RecallMode .MULTI_HIT , document_comparison_field = "meta.file_id" )
319+ result = evaluator .run (
320+ ground_truth_documents = [[Document (meta = {"file_id" : "f1" }), Document (content = "no file_id" )]],
321+ retrieved_documents = [[Document (meta = {"file_id" : "f1" })]],
322+ )
323+ assert result == {"individual_scores" : [1.0 ], "score" : 1.0 }
0 commit comments