1 use indexmap::indexmap;
2 use indexmap::Equivalent;
3
4 use std::hash::Hash;
5
6 #[derive(Debug, Hash)]
7 pub struct Pair<A, B>(pub A, pub B);
8
9 impl<A, B, C, D> PartialEq<(A, B)> for Pair<C, D>
10 where
11 C: PartialEq<A>,
12 D: PartialEq<B>,
13 {
eq(&self, rhs: &(A, B)) -> bool14 fn eq(&self, rhs: &(A, B)) -> bool {
15 self.0 == rhs.0 && self.1 == rhs.1
16 }
17 }
18
19 impl<A, B, X> Equivalent<X> for Pair<A, B>
20 where
21 Pair<A, B>: PartialEq<X>,
22 A: Hash + Eq,
23 B: Hash + Eq,
24 {
equivalent(&self, other: &X) -> bool25 fn equivalent(&self, other: &X) -> bool {
26 *self == *other
27 }
28 }
29
30 #[test]
test_lookup()31 fn test_lookup() {
32 let s = String::from;
33 let map = indexmap! {
34 (s("a"), s("b")) => 1,
35 (s("a"), s("x")) => 2,
36 };
37
38 assert!(map.contains_key(&Pair("a", "b")));
39 assert!(!map.contains_key(&Pair("b", "a")));
40 }
41
42 #[test]
test_string_str()43 fn test_string_str() {
44 let s = String::from;
45 let mut map = indexmap! {
46 s("a") => 1, s("b") => 2,
47 s("x") => 3, s("y") => 4,
48 };
49
50 assert!(map.contains_key("a"));
51 assert!(!map.contains_key("z"));
52 assert_eq!(map.swap_remove("b"), Some(2));
53 }
54