@@ -13,6 +13,20 @@ use itertools::assert_equal;
13
13
use itertools:: { enumerate, rev} ;
14
14
use std:: iter:: FromIterator ;
15
15
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
+
16
30
#[ test]
17
31
fn double_ended ( ) {
18
32
let a = ArcArray :: linspace ( 0. , 7. , 8 ) ;
@@ -585,6 +599,33 @@ fn axis_chunks_iter_zero_axis_len() {
585
599
assert ! ( a. axis_chunks_iter( Axis ( 0 ) , 5 ) . next( ) . is_none( ) ) ;
586
600
}
587
601
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
+
588
629
#[ test]
589
630
fn axis_chunks_iter_mut ( ) {
590
631
let a = ArcArray :: from_iter ( 0 ..24 ) ;
0 commit comments