File tree 2 files changed +45
-0
lines changed
2 files changed +45
-0
lines changed Original file line number Diff line number Diff line change @@ -738,6 +738,32 @@ macro_rules! map_impl {
738
738
} )
739
739
}
740
740
741
+ /// Tests if every element of the iterator matches a predicate.
742
+ ///
743
+ /// Returns `true` if `predicate` evaluates to `true` for all elements.
744
+ /// Returns `true` if the input arrays are empty.
745
+ ///
746
+ /// Example:
747
+ ///
748
+ /// ```
749
+ /// use ndarray::{array, Zip};
750
+ /// let a = array![1, 2, 3];
751
+ /// let b = array![1, 4, 9];
752
+ /// assert!(Zip::from(&a).and(&b).all(|&a, &b| a * a == b));
753
+ /// ```
754
+ pub fn all<F >( mut self , mut predicate: F ) -> bool
755
+ where F : FnMut ( $( $p:: Item ) ,* ) -> bool
756
+ {
757
+ self . apply_core( true , move |_, args| {
758
+ let ( $( $p, ) * ) = args;
759
+ if predicate( $( $p) ,* ) {
760
+ FoldWhile :: Continue ( true )
761
+ } else {
762
+ FoldWhile :: Done ( false )
763
+ }
764
+ } ) . into_inner( )
765
+ }
766
+
741
767
expand_if!( @bool [ $notlast]
742
768
743
769
/// Include the producer `p` in the Zip.
Original file line number Diff line number Diff line change @@ -271,3 +271,22 @@ fn test_indices_split_1() {
271
271
}
272
272
}
273
273
}
274
+
275
+ #[ test]
276
+ fn test_zip_all ( ) {
277
+ let a = Array :: < f32 , _ > :: zeros ( 62 ) ;
278
+ let b = Array :: < f32 , _ > :: ones ( 62 ) ;
279
+ let mut c = Array :: < f32 , _ > :: ones ( 62 ) ;
280
+ c[ 5 ] = 0.0 ;
281
+ assert_eq ! ( true , Zip :: from( & a) . and( & b) . all( |& x, & y| x + y == 1.0 ) ) ;
282
+ assert_eq ! ( false , Zip :: from( & a) . and( & b) . all( |& x, & y| x == y) ) ;
283
+ assert_eq ! ( false , Zip :: from( & a) . and( & c) . all( |& x, & y| x + y == 1.0 ) ) ;
284
+ }
285
+
286
+ #[ test]
287
+ fn test_zip_all_empty_array ( ) {
288
+ let a = Array :: < f32 , _ > :: zeros ( 0 ) ;
289
+ let b = Array :: < f32 , _ > :: ones ( 0 ) ;
290
+ assert_eq ! ( true , Zip :: from( & a) . and( & b) . all( |& _x, & _y| true ) ) ;
291
+ assert_eq ! ( true , Zip :: from( & a) . and( & b) . all( |& _x, & _y| false ) ) ;
292
+ }
You can’t perform that action at this time.
0 commit comments