To do the next point, test_specializations need clonable iterators which helped find iterators that should be clonable but were not yet. 3 very small commits.
I do not want to add specialization tests one by one in future pull requests so this is mostly done! 1 big but straightforward commit.
For two tests I previously wrote, I now discard inputs (in the quickcheck-way) instead of truncating them. 1 small commit.
Now about mostly done... Not all of our iterators are tested here:
group_by
chunks
tee
rciter
test_specializations need clonable iterators but &mut iterator is not clonable, Therefore, we can't clone PeekingTakeWhile and TakeWhileRef. We need to find a way to test them too.
Finally a bug... multi_cartesian_product is not tested here because specializations of last and countFAIL sometimes, and I don't want this pull request to be blocked by it! It requires further investigation and will have a dedicated pull request.
EDIT: Apparently, the iterator is not fused even when all child iterators are, and this was the intended behavior, that's confusing.
Later EDITs: While making a bunch of specialization benchmarks, I noticed that I forgot some and some here:
repeat_n
TupleBuffer (buffer for a finished .tuples())
MapForGrouping used for GroupingMapBy but it's strictly internal to the library, a method of GroupingMapBy should be tested to test the specialization of future MapForGrouping::fold.
unfold, iterate: infinite iterators so e.g. test last would not finish.
test_specializations
need clonable iterators which helped find iterators that should be clonable but were not yet. 3 very small commits.Now about mostly done... Not all of our iterators are tested here:
group_by
chunks
tee
rciter
test_specializations
need clonable iterators but&mut iterator
is not clonable, Therefore, we can't clonePeekingTakeWhile
andTakeWhileRef
. We need to find a way to test them too.Finally a bug...
multi_cartesian_product
is not tested here because specializations oflast
andcount
FAIL sometimes, and I don't want this pull request to be blocked by it! It requires further investigation and will have a dedicated pull request. EDIT: Apparently, the iterator is not fused even when all child iterators are, and this was the intended behavior, that's confusing.Later EDITs: While making a bunch of specialization benchmarks, I noticed that I forgot some and some here:
repeat_n
TupleBuffer
(buffer for a finished.tuples()
)MapForGrouping
used forGroupingMapBy
but it's strictly internal to the library, a method ofGroupingMapBy
should be tested to test the specialization of futureMapForGrouping::fold
.unfold
,iterate
: infinite iterators so e.g. testlast
would not finish.