введите здесь описание изображения
Есть ли неупорядоченные массивы Или не судите порядок при утверждении?
Что я делаю, так это сортирую обе стороны в самом вызове assert. Это работает, только если T
реализует Ord.
let result = my_function();
my_function.sort();
let target = vec![];
target.sort();
assert_eq!(result, target);
Если ваш тип данных не поддерживает Ord, вы можете использовать sort_by с FnMut, который возвращает экземпляр Ordering.
Обратите внимание, что это может вызвать проблемы, если нет одного конкретного способа сортировки вектора.
Преобразуйте Vec
(s) в HashBag
(s), которые содержат ссылки на элементы в Vec
s. Это будет игнорировать порядок элементов при утверждении равенства:
[dependencies]
hashbag = "0.1.9"
#[test]
fn two_vecs_equal_independent_of_item_order() {
use hashbag::HashBag;
let actual = vec![1, 2, 3, 3];
let expected_fail = vec![3, 2, 1];
assert_ne!(
actual.iter().collect::<HashBag<&i32>>(),
expected_fail.iter().collect::<HashBag<&i32>>()
);
let expected_pass = vec![3, 2, 1, 3];
assert_eq!(
actual.iter().collect::<HashBag<&i32>>(),
expected_pass.iter().collect::<HashBag<&i32>>()
);
}
Обратите внимание, что это не работает, когда вектор имеет несколько эквивалентных значений.
Хороший улов! Я обновил ответ, чтобы использовать HashBag
вместо HashSet
, что решит эту проблему.