From 4b3af76b746dd2e23a60d3c97b32bca07a5ec826 Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Tue, 4 Apr 2023 18:23:03 +0900 Subject: [PATCH] Added failing use case See #1981 --- src/query/boolean_query/block_wand.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/query/boolean_query/block_wand.rs b/src/query/boolean_query/block_wand.rs index ad9a8b2ba..456bcfafd 100644 --- a/src/query/boolean_query/block_wand.rs +++ b/src/query/boolean_query/block_wand.rs @@ -228,6 +228,7 @@ pub fn block_wand_single_scorer( loop { // We position the scorer on a block that can reach // the threshold. + dbg!(scorer.block_max_score(), threshold); while scorer.block_max_score() < threshold { let last_doc_in_block = scorer.last_doc_in_block(); if last_doc_in_block == TERMINATED { @@ -358,6 +359,7 @@ mod tests { } limit }; + dbg!(term_scorers.len()); if term_scorers.len() == 1 { let scorer = term_scorers.pop().unwrap(); @@ -431,7 +433,7 @@ mod tests { fn test_block_wand_aux(posting_lists: &[Vec<(DocId, u32)>], fieldnorms: &[u32]) { // We virtually repeat all docs 64 times in order to emulate blocks of 2 documents - // and surface blogs more easily. + // and surface bugs more easily. const REPEAT: usize = 64; let fieldnorms_expanded = fieldnorms .iter() @@ -476,10 +478,13 @@ mod tests { TermScorer::create_for_test(postings, &fieldnorms_expanded[..], bm25_weight) }) .collect(); - for top_k in 1..4 { + for top_k in 2..3 { let checkpoints_for_each_pruning = compute_checkpoints_for_each_pruning(term_scorers.clone(), top_k); - let checkpoints_manual = compute_checkpoints_manual(term_scorers.clone(), top_k); + let checkpoints_manual = + compute_checkpoints_manual(term_scorers.clone(), top_k); + dbg!(&checkpoints_for_each_pruning); + dbg!(&checkpoints_manual); assert_eq!(checkpoints_for_each_pruning.len(), checkpoints_manual.len()); for (&(left_doc, left_score), &(right_doc, right_score)) in checkpoints_for_each_pruning .iter() @@ -507,6 +512,13 @@ mod tests { } } + #[test] + fn test_block_wand_failing_case() { + let posting_lists = &[vec![(0, 94), (1, 47), (2, 20)]]; + let field_norms = &[80, 33, 2]; + test_block_wand_aux(&posting_lists[..], field_norms); + } + #[test] fn test_fn_reproduce_proptest() { let postings_lists = &[