Skip to content

Commit 7157b82

Browse files
committed
Add more tests and clarify best_match_in docs
1 parent 65e5b01 commit 7157b82

File tree

1 file changed

+60
-2
lines changed

1 file changed

+60
-2
lines changed

src/shared.rs

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ impl<S: Deref<Target = str>> ModifierSet<S> {
8686
/// by the following two criteria (in order):
8787
/// 1. Number of modifiers in common with `self` (more is better).
8888
/// 2. Total number of modifiers (fewer is better).
89+
///
90+
/// If there are multiple best matches, the first of them is returned.
8991
pub fn best_match_in<'a, T>(
9092
&self,
9193
variants: impl Iterator<Item = (ModifierSet<&'a str>, T)>,
@@ -150,7 +152,63 @@ mod tests {
150152
type ModifierSet = super::ModifierSet<&'static str>;
151153

152154
#[test]
153-
fn empty_set_empty_iter() {
155+
fn default_is_empty() {
156+
assert!(ModifierSet::default().is_empty());
157+
}
158+
159+
#[test]
160+
fn iter_count() {
154161
assert_eq!(ModifierSet::default().iter().count(), 0);
162+
assert_eq!(ModifierSet::new_unchecked("a").iter().count(), 1);
163+
assert_eq!(ModifierSet::new_unchecked("a.b").iter().count(), 2);
164+
assert_eq!(ModifierSet::new_unchecked("a.b.c").iter().count(), 3);
155165
}
156-
}
166+
167+
#[test]
168+
fn subset() {
169+
assert!(
170+
ModifierSet::new_unchecked("a").is_subset(ModifierSet::new_unchecked("a.b"))
171+
);
172+
assert!(
173+
ModifierSet::new_unchecked("a").is_subset(ModifierSet::new_unchecked("b.a"))
174+
);
175+
assert!(ModifierSet::new_unchecked("a.b")
176+
.is_subset(ModifierSet::new_unchecked("b.c.a")));
177+
}
178+
179+
#[test]
180+
fn best_match() {
181+
// 1. more modifiers in common with self
182+
assert_eq!(
183+
ModifierSet::new_unchecked("a.b").best_match_in([
184+
(ModifierSet::new_unchecked("a.c"), 1),
185+
(ModifierSet::new_unchecked("a.b"), 2),
186+
].into_iter()),
187+
Some(2)
188+
);
189+
// 2. fewer modifiers in general
190+
assert_eq!(
191+
ModifierSet::new_unchecked("a").best_match_in([
192+
(ModifierSet::new_unchecked("a"), 1),
193+
(ModifierSet::new_unchecked("a.b"), 2),
194+
].into_iter()),
195+
Some(1)
196+
);
197+
// the first rule takes priority over the second
198+
assert_eq!(
199+
ModifierSet::new_unchecked("a.b").best_match_in([
200+
(ModifierSet::new_unchecked("a"), 1),
201+
(ModifierSet::new_unchecked("a.b"), 2),
202+
].into_iter()),
203+
Some(2)
204+
);
205+
// among multiple best matches, the first one is returned
206+
assert_eq!(
207+
ModifierSet::default().best_match_in([
208+
(ModifierSet::new_unchecked("a"), 1),
209+
(ModifierSet::new_unchecked("b"), 2)
210+
].into_iter()),
211+
Some(1)
212+
);
213+
}
214+
}

0 commit comments

Comments
 (0)