@@ -13,6 +13,20 @@ use itertools::assert_equal;
1313use itertools:: { enumerate, rev} ;
1414use std:: iter:: FromIterator ;
1515
16+ macro_rules! assert_panics {
17+ ( $body: expr) => {
18+ if let Ok ( v) = :: std:: panic:: catch_unwind( || $body) {
19+ panic!( "assertion failed: should_panic; \
20+ non-panicking result: {:?}", v) ;
21+ }
22+ } ;
23+ ( $body: expr, $( $arg: tt) * ) => {
24+ if let Ok ( _) = :: std:: panic:: catch_unwind( || $body) {
25+ panic!( $( $arg) * ) ;
26+ }
27+ } ;
28+ }
29+
1630#[ test]
1731fn double_ended ( ) {
1832 let a = ArcArray :: linspace ( 0. , 7. , 8 ) ;
@@ -585,6 +599,33 @@ fn axis_chunks_iter_zero_axis_len() {
585599 assert ! ( a. axis_chunks_iter( Axis ( 0 ) , 5 ) . next( ) . is_none( ) ) ;
586600}
587601
602+ #[ test]
603+ fn axis_chunks_iter_split_at ( ) {
604+ let mut a = Array2 :: < usize > :: zeros ( ( 11 , 3 ) ) ;
605+ a. iter_mut ( ) . enumerate ( ) . for_each ( |( i, elt) | * elt = i) ;
606+ for source in & [
607+ a. slice ( s ! [ ..0 , ..] ) ,
608+ a. slice ( s ! [ ..1 , ..] ) ,
609+ a. slice ( s ! [ ..5 , ..] ) ,
610+ a. slice ( s ! [ ..10 , ..] ) ,
611+ a. slice ( s ! [ ..11 , ..] ) ,
612+ a. slice ( s ! [ .., ..0 ] ) ,
613+ ] {
614+ let chunks_iter = source. axis_chunks_iter ( Axis ( 0 ) , 5 ) ;
615+ let all_chunks: Vec < _ > = chunks_iter. clone ( ) . collect ( ) ;
616+ let n_chunks = chunks_iter. len ( ) ;
617+ assert_eq ! ( n_chunks, all_chunks. len( ) ) ;
618+ for index in 0 ..=n_chunks {
619+ let ( left, right) = chunks_iter. clone ( ) . split_at ( index) ;
620+ assert_eq ! ( & all_chunks[ ..index] , & left. collect:: <Vec <_>>( ) [ ..] ) ;
621+ assert_eq ! ( & all_chunks[ index..] , & right. collect:: <Vec <_>>( ) [ ..] ) ;
622+ }
623+ assert_panics ! ( {
624+ chunks_iter. split_at( n_chunks + 1 ) ;
625+ } ) ;
626+ }
627+ }
628+
588629#[ test]
589630fn axis_chunks_iter_mut ( ) {
590631 let a = ArcArray :: from_iter ( 0 ..24 ) ;
0 commit comments