Skip to content

Commit 10fb065

Browse files
committed
add relevance score test
1 parent 9ee3914 commit 10fb065

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

crates/ide_completion/src/item.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,3 +499,63 @@ impl Builder {
499499
self
500500
}
501501
}
502+
503+
#[cfg(test)]
504+
mod tests {
505+
use itertools::Itertools;
506+
use test_utils::assert_eq_text;
507+
508+
use super::CompletionRelevance;
509+
510+
/// Check that these are CompletionRelevance are sorted in ascending order
511+
/// by their relevance score.
512+
///
513+
/// We want to avoid making assertions about the absolute score of any
514+
/// item, but we do want to assert whether each is >, <, or == to the
515+
/// others.
516+
///
517+
/// If provided vec![vec![a], vec![b, c], vec![d]], then this will assert:
518+
/// a.score < b.score == c.score < d.score
519+
fn check_relevance_score_ordered(expected_relevance_order: Vec<Vec<CompletionRelevance>>) {
520+
let expected = format!("{:#?}", &expected_relevance_order);
521+
522+
let actual_relevance_order = expected_relevance_order
523+
.into_iter()
524+
.flatten()
525+
.map(|r| (r.score(), r))
526+
.sorted_by_key(|(score, _r)| *score)
527+
.fold(
528+
(u8::MIN, vec![vec![]]),
529+
|(mut currently_collecting_score, mut out), (score, r)| {
530+
if currently_collecting_score == score {
531+
out.last_mut().unwrap().push(r);
532+
} else {
533+
currently_collecting_score = score;
534+
out.push(vec![r]);
535+
}
536+
(currently_collecting_score, out)
537+
},
538+
)
539+
.1;
540+
541+
let actual = format!("{:#?}", &actual_relevance_order);
542+
543+
assert_eq_text!(&expected, &actual);
544+
}
545+
546+
#[test]
547+
fn relevance_score() {
548+
// This test asserts that the relevance score for these items is ascending, and
549+
// that any items in the same vec have the same score.
550+
let expected_relevance_order = vec![
551+
vec![CompletionRelevance::default()],
552+
vec![
553+
CompletionRelevance { exact_name_match: true, ..CompletionRelevance::default() },
554+
CompletionRelevance { exact_type_match: true, ..CompletionRelevance::default() },
555+
],
556+
vec![CompletionRelevance { exact_name_match: true, exact_type_match: true }],
557+
];
558+
559+
check_relevance_score_ordered(expected_relevance_order);
560+
}
561+
}

0 commit comments

Comments
 (0)