@@ -6,24 +6,49 @@ use orx_pinned_vec::{ConcurrentPinnedVec, IntoConcurrentPinnedVec, PinnedVec};
66use std:: string:: { String , ToString } ;
77use test_case:: test_matrix;
88
9- fn vec_doubling ( ) -> SplitVec < String , Doubling > {
10- ( 0 ..20 ) . map ( |x| x. to_string ( ) ) . collect ( )
9+ fn vec_doubling ( n : usize ) -> SplitVec < String , Doubling > {
10+ ( 0 ..n ) . map ( |x| x. to_string ( ) ) . collect ( )
1111}
1212
13- fn vec_linear ( ) -> SplitVec < String , Linear > {
13+ fn vec_linear ( n : usize ) -> SplitVec < String , Linear > {
1414 let mut vec = SplitVec :: with_linear_growth ( 2 ) ;
15- vec. extend ( ( 0 ..20 ) . map ( |x| x. to_string ( ) ) ) ;
15+ vec. extend ( ( 0 ..n ) . map ( |x| x. to_string ( ) ) ) ;
1616 vec
1717}
1818
19+ #[ test_matrix( [ vec_doubling, vec_linear] ) ]
20+ fn into_iter_empty < G , F > ( vec : F )
21+ where
22+ G : GrowthWithConstantTimeAccess ,
23+ F : Fn ( usize ) -> SplitVec < String , G > ,
24+ {
25+ let iter = || {
26+ let vec = vec ( 0 ) ;
27+ let range = 0 ..vec. len ( ) ;
28+ let convec = vec. into_concurrent ( ) ;
29+ let ( growth, data, capacity) = convec. destruct ( ) ;
30+ ConcurrentSplitVecIntoIter :: new ( capacity, data, growth, range)
31+ } ;
32+
33+ let consume_all = iter ( ) . count ( ) ;
34+ assert_eq ! ( consume_all, 0 ) ;
35+
36+ let mut consume_half = iter ( ) ;
37+ for _ in 0 ..10 {
38+ _ = consume_half. next ( ) ;
39+ }
40+
41+ let _consume_none = iter ( ) ;
42+ }
43+
1944#[ test_matrix( [ vec_doubling, vec_linear] ) ]
2045fn into_iter_non_taken < G , F > ( vec : F )
2146where
2247 G : GrowthWithConstantTimeAccess ,
23- F : Fn ( ) -> SplitVec < String , G > ,
48+ F : Fn ( usize ) -> SplitVec < String , G > ,
2449{
2550 let iter = || {
26- let vec = vec ( ) ;
51+ let vec = vec ( 20 ) ;
2752 let range = 0 ..vec. len ( ) ;
2853 let convec = vec. into_concurrent ( ) ;
2954 let ( growth, data, capacity) = convec. destruct ( ) ;
@@ -45,10 +70,10 @@ where
4570fn into_iter_taken_from_beg < G , F > ( vec : F )
4671where
4772 G : GrowthWithConstantTimeAccess ,
48- F : Fn ( ) -> SplitVec < String , G > ,
73+ F : Fn ( usize ) -> SplitVec < String , G > ,
4974{
5075 let iter = || {
51- let vec = vec ( ) ;
76+ let vec = vec ( 20 ) ;
5277 let range = 5 ..vec. len ( ) ;
5378 let convec = vec. into_concurrent ( ) ;
5479
@@ -76,10 +101,10 @@ where
76101fn into_iter_taken_from_end < G , F > ( vec : F )
77102where
78103 G : GrowthWithConstantTimeAccess ,
79- F : Fn ( ) -> SplitVec < String , G > ,
104+ F : Fn ( usize ) -> SplitVec < String , G > ,
80105{
81106 let iter = || {
82- let vec = vec ( ) ;
107+ let vec = vec ( 20 ) ;
83108 let vec_len = vec. len ( ) ;
84109 let range = 0 ..15 ;
85110 let convec = vec. into_concurrent ( ) ;
@@ -108,10 +133,10 @@ where
108133fn into_iter_taken_from_both_ends < G , F > ( vec : F )
109134where
110135 G : GrowthWithConstantTimeAccess ,
111- F : Fn ( ) -> SplitVec < String , G > ,
136+ F : Fn ( usize ) -> SplitVec < String , G > ,
112137{
113138 let iter = || {
114- let vec = vec ( ) ;
139+ let vec = vec ( 20 ) ;
115140 let vec_len = vec. len ( ) ;
116141 let range = 4 ..15 ;
117142 let convec = vec. into_concurrent ( ) ;
0 commit comments