Skip to content

Commit 8467d3b

Browse files
committed
refactor(common): move assert tools to new test::assert module
1 parent 5c2b7c5 commit 8467d3b

File tree

5 files changed

+92
-80
lines changed

5 files changed

+92
-80
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/// Compare two iterators ignoring the order
2+
pub fn equivalent_to<T, I1, I2>(a: I1, b: I2) -> bool
3+
where
4+
T: PartialEq + Ord,
5+
I1: IntoIterator<Item = T> + Clone,
6+
I2: IntoIterator<Item = T> + Clone,
7+
{
8+
let a = as_sorted_vec(a);
9+
let b = as_sorted_vec(b);
10+
a == b
11+
}
12+
13+
/// Assert that two iterators are equivalent
14+
pub fn assert_equivalent<T, I1, I2>(a: I1, b: I2)
15+
where
16+
T: PartialEq + Ord + std::fmt::Debug,
17+
I1: IntoIterator<Item = T> + Clone,
18+
I2: IntoIterator<Item = T> + Clone,
19+
{
20+
let a = as_sorted_vec(a);
21+
let b = as_sorted_vec(b);
22+
assert_eq!(a, b);
23+
}
24+
25+
/// Assert that two iterators are equivalent
26+
#[macro_export]
27+
macro_rules! assert_equivalent_macro {
28+
( $expected:expr, $actual:expr ) => {{
29+
let expected = $crate::test::as_sorted_vec($expected);
30+
let actual = $crate::test::as_sorted_vec($actual);
31+
assert_eq!(expected, actual);
32+
}};
33+
}
34+
pub use assert_equivalent_macro;
35+
36+
/// Create a sorted clone of an iterable.
37+
pub fn as_sorted_vec<T: Ord, I: IntoIterator<Item = T> + Clone>(iter: I) -> Vec<T> {
38+
let mut list: Vec<T> = iter.clone().into_iter().collect();
39+
list.sort();
40+
list
41+
}
42+
43+
#[cfg(test)]
44+
mod tests {
45+
use std::collections::HashSet;
46+
47+
use super::*;
48+
49+
#[test]
50+
fn test_equivalent_to() {
51+
assert!(equivalent_to(vec![1, 2, 3], vec![3, 2, 1]));
52+
assert!(equivalent_to(vec![1, 2, 3], vec![2, 1, 3]));
53+
assert!(!equivalent_to(vec![1, 2, 3], vec![3, 2, 1, 4]));
54+
assert!(!equivalent_to(vec![1, 2, 3], vec![3, 2]));
55+
56+
assert!(equivalent_to([1, 2, 3], vec![3, 2, 1]));
57+
assert!(equivalent_to(&[1, 2, 3], &vec![3, 2, 1]));
58+
assert!(equivalent_to([1, 2, 3], HashSet::from([3, 2, 1])));
59+
assert!(equivalent_to(vec![1, 2, 3], HashSet::from([3, 2, 1])));
60+
assert!(equivalent_to(&vec![1, 2, 3], &HashSet::from([3, 2, 1])));
61+
62+
assert_equivalent(vec![1, 2, 3], vec![3, 2, 1]);
63+
assert_equivalent(vec![1, 2, 3], vec![2, 1, 3]);
64+
65+
assert_equivalent([1, 2, 3], vec![3, 2, 1]);
66+
assert_equivalent(&[1, 2, 3], &vec![3, 2, 1]);
67+
assert_equivalent([1, 2, 3], HashSet::from([3, 2, 1]));
68+
assert_equivalent(vec![1, 2, 3], HashSet::from([3, 2, 1]));
69+
assert_equivalent(&vec![1, 2, 3], &HashSet::from([3, 2, 1]));
70+
}
71+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/// Compare two json strings ignoring keys order
2+
#[macro_export]
3+
macro_rules! assert_same_json {
4+
( $expected:expr, $actual:expr ) => {
5+
assert_eq!(
6+
serde_json::from_str::<serde_json::Value>($expected).unwrap(),
7+
serde_json::from_str::<serde_json::Value>($actual).unwrap()
8+
)
9+
};
10+
}
11+
pub use assert_same_json;

mithril-common/src/test/assert/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
mod dir_eq;
2+
mod iters_equivalent;
3+
mod json;
4+
5+
pub use dir_eq::*;
6+
pub use iters_equivalent::*;
7+
pub use json::*;

mithril-common/src/test/mod.rs

Lines changed: 3 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -10,70 +10,16 @@ pub mod builder;
1010
pub mod double;
1111
pub mod mock_extensions;
1212

13-
mod dir_eq;
13+
mod assert;
1414
mod memory_logger;
1515
mod temp_dir;
1616

17-
pub use dir_eq::*;
17+
pub use assert::*;
1818
pub use memory_logger::*;
1919
pub use temp_dir::*;
2020
#[cfg(test)]
2121
pub(crate) use utils::*;
2222

23-
/// Compare two json strings ignoring keys order
24-
#[macro_export]
25-
macro_rules! assert_same_json {
26-
( $expected:expr, $actual:expr ) => {
27-
assert_eq!(
28-
serde_json::from_str::<serde_json::Value>($expected).unwrap(),
29-
serde_json::from_str::<serde_json::Value>($actual).unwrap()
30-
)
31-
};
32-
}
33-
pub use assert_same_json;
34-
35-
/// Compare two iterators ignoring the order
36-
pub fn equivalent_to<T, I1, I2>(a: I1, b: I2) -> bool
37-
where
38-
T: PartialEq + Ord,
39-
I1: IntoIterator<Item = T> + Clone,
40-
I2: IntoIterator<Item = T> + Clone,
41-
{
42-
let a = as_sorted_vec(a);
43-
let b = as_sorted_vec(b);
44-
a == b
45-
}
46-
47-
/// Assert that two iterators are equivalent
48-
pub fn assert_equivalent<T, I1, I2>(a: I1, b: I2)
49-
where
50-
T: PartialEq + Ord + std::fmt::Debug,
51-
I1: IntoIterator<Item = T> + Clone,
52-
I2: IntoIterator<Item = T> + Clone,
53-
{
54-
let a = as_sorted_vec(a);
55-
let b = as_sorted_vec(b);
56-
assert_eq!(a, b);
57-
}
58-
59-
/// Assert that two iterators are equivalent
60-
#[macro_export]
61-
macro_rules! assert_equivalent_macro {
62-
( $expected:expr, $actual:expr ) => {{
63-
let expected = $crate::test::as_sorted_vec($expected);
64-
let actual = $crate::test::as_sorted_vec($actual);
65-
assert_eq!(expected, actual);
66-
}};
67-
}
68-
pub use assert_equivalent_macro;
69-
70-
/// Create a sorted clone af an iterable.
71-
pub fn as_sorted_vec<T: Ord, I: IntoIterator<Item = T> + Clone>(iter: I) -> Vec<T> {
72-
let mut list: Vec<T> = iter.clone().into_iter().collect();
73-
list.sort();
74-
list
75-
}
76-
7723
/// Return the path of the given function.
7824
/// If the last function is `f`, it is removed.
7925
/// The last `{{closure}}` is also removed.
@@ -121,8 +67,8 @@ pub use current_function_path;
12167
#[cfg(test)]
12268
mod utils {
12369
use std::io;
70+
use std::path::Path;
12471
use std::sync::Arc;
125-
use std::{collections::HashSet, path::Path};
12672

12773
use slog::{Drain, Logger};
12874
use slog_async::Async;
@@ -151,29 +97,6 @@ mod utils {
15197
}
15298
}
15399

154-
#[test]
155-
fn test_equivalent_to() {
156-
assert!(equivalent_to(vec![1, 2, 3], vec![3, 2, 1]));
157-
assert!(equivalent_to(vec![1, 2, 3], vec![2, 1, 3]));
158-
assert!(!equivalent_to(vec![1, 2, 3], vec![3, 2, 1, 4]));
159-
assert!(!equivalent_to(vec![1, 2, 3], vec![3, 2]));
160-
161-
assert!(equivalent_to([1, 2, 3], vec![3, 2, 1]));
162-
assert!(equivalent_to(&[1, 2, 3], &vec![3, 2, 1]));
163-
assert!(equivalent_to([1, 2, 3], HashSet::from([3, 2, 1])));
164-
assert!(equivalent_to(vec![1, 2, 3], HashSet::from([3, 2, 1])));
165-
assert!(equivalent_to(&vec![1, 2, 3], &HashSet::from([3, 2, 1])));
166-
167-
assert_equivalent(vec![1, 2, 3], vec![3, 2, 1]);
168-
assert_equivalent(vec![1, 2, 3], vec![2, 1, 3]);
169-
170-
assert_equivalent([1, 2, 3], vec![3, 2, 1]);
171-
assert_equivalent(&[1, 2, 3], &vec![3, 2, 1]);
172-
assert_equivalent([1, 2, 3], HashSet::from([3, 2, 1]));
173-
assert_equivalent(vec![1, 2, 3], HashSet::from([3, 2, 1]));
174-
assert_equivalent(&vec![1, 2, 3], &HashSet::from([3, 2, 1]));
175-
}
176-
177100
#[test]
178101
fn test_current_function_extract_function_name() {
179102
let name = current_function!();

0 commit comments

Comments
 (0)