From 949610dbb8c116e8f5b6b8e0c7c41f367bacd7da Mon Sep 17 00:00:00 2001 From: Giacomo Stevanato Date: Fri, 20 Aug 2021 18:39:14 +0200 Subject: [PATCH 1/2] Move intersperse fold_specialization test to the specializations quicktests --- tests/fold_specialization.rs | 13 ------------- tests/specializations.rs | 6 ++++++ 2 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 tests/fold_specialization.rs diff --git a/tests/fold_specialization.rs b/tests/fold_specialization.rs deleted file mode 100644 index a984b40b8..000000000 --- a/tests/fold_specialization.rs +++ /dev/null @@ -1,13 +0,0 @@ -use itertools::Itertools; - -#[test] -fn specialization_intersperse() { - let mut iter = (1..2).intersperse(0); - iter.clone().for_each(|x| assert_eq!(Some(x), iter.next())); - - let mut iter = (1..3).intersperse(0); - iter.clone().for_each(|x| assert_eq!(Some(x), iter.next())); - - let mut iter = (1..4).intersperse(0); - iter.clone().for_each(|x| assert_eq!(Some(x), iter.next())); -} diff --git a/tests/specializations.rs b/tests/specializations.rs index bc337c28e..8f3805c34 100644 --- a/tests/specializations.rs +++ b/tests/specializations.rs @@ -72,6 +72,12 @@ fn test_specializations( } } +quickcheck! { + fn intersperse(v: Vec) -> () { + test_specializations(&v.into_iter().intersperse(0)); + } +} + quickcheck! { fn put_back_qc(test_vec: Vec) -> () { test_specializations(&itertools::put_back(test_vec.iter())); From bf4ca16746d93d32cd0cc754bd2d2cad92e924a5 Mon Sep 17 00:00:00 2001 From: Giacomo Stevanato Date: Fri, 20 Aug 2021 18:39:54 +0200 Subject: [PATCH 2/2] Make specializations tests actually test specialized methods --- tests/specializations.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/specializations.rs b/tests/specializations.rs index 8f3805c34..dc3ff6a8a 100644 --- a/tests/specializations.rs +++ b/tests/specializations.rs @@ -15,16 +15,16 @@ where } } -fn check_specialized<'a, V, IterItem, Iter, F>(iterator: &Iter, mapper: F) -where - V: Eq + Debug, - Iter: Iterator + Clone + 'a, - F: Fn(Box + 'a>) -> V, -{ - assert_eq!( - mapper(Box::new(Unspecialized(iterator.clone()))), - mapper(Box::new(iterator.clone())) - ) +macro_rules! check_specialized { + ($src:expr, |$it:pat| $closure:expr) => { + let $it = $src.clone(); + let v1 = $closure; + + let $it = Unspecialized($src.clone()); + let v2 = $closure; + + assert_eq!(v1, v2); + } } fn test_specializations( @@ -33,10 +33,10 @@ fn test_specializations( IterItem: Eq + Debug + Clone, Iter: Iterator + Clone, { - check_specialized(it, |i| i.count()); - check_specialized(it, |i| i.last()); - check_specialized(it, |i| i.collect::>()); - check_specialized(it, |i| { + check_specialized!(it, |i| i.count()); + check_specialized!(it, |i| i.last()); + check_specialized!(it, |i| i.collect::>()); + check_specialized!(it, |i| { let mut parameters_from_fold = vec![]; let fold_result = i.fold(vec![], |mut acc, v: IterItem| { parameters_from_fold.push((acc.clone(), v.clone())); @@ -45,7 +45,7 @@ fn test_specializations( }); (parameters_from_fold, fold_result) }); - check_specialized(it, |mut i| { + check_specialized!(it, |mut i| { let mut parameters_from_all = vec![]; let first = i.next(); let all_result = i.all(|x| { @@ -56,7 +56,7 @@ fn test_specializations( }); let size = it.clone().count(); for n in 0..size + 2 { - check_specialized(it, |mut i| i.nth(n)); + check_specialized!(it, |mut i| i.nth(n)); } // size_hint is a bit harder to check let mut it_sh = it.clone();