@@ -1786,6 +1786,64 @@ fn test_contiguous() {
1786
1786
assert ! ( b. as_slice_memory_order( ) . is_some( ) ) ;
1787
1787
}
1788
1788
1789
+ #[ test]
1790
+ fn test_contiguous_neg_strides ( ) {
1791
+ let s = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 ] ;
1792
+ let mut a = ArrayView :: from_shape ( ( 2 , 3 , 2 ) . strides ( ( 1 , 4 , 2 ) ) , & s) . unwrap ( ) ;
1793
+ assert_eq ! (
1794
+ a,
1795
+ arr3( & [ [ [ 0 , 2 ] , [ 4 , 6 ] , [ 8 , 10 ] ] , [ [ 1 , 3 ] , [ 5 , 7 ] , [ 9 , 11 ] ] ] )
1796
+ ) ;
1797
+ assert ! ( a. as_slice_memory_order( ) . is_some( ) ) ;
1798
+
1799
+ let mut b = a. slice ( s ! [ ..; 1 , ..; -1 , ..; -1 ] ) ;
1800
+ assert_eq ! (
1801
+ b,
1802
+ arr3( & [ [ [ 10 , 8 ] , [ 6 , 4 ] , [ 2 , 0 ] ] , [ [ 11 , 9 ] , [ 7 , 5 ] , [ 3 , 1 ] ] ] )
1803
+ ) ;
1804
+ assert ! ( b. as_slice_memory_order( ) . is_some( ) ) ;
1805
+
1806
+ b. swap_axes ( 1 , 2 ) ;
1807
+ assert_eq ! ( b, arr3( & [ [ [ 10 , 6 , 2 ] , [ 8 , 4 , 0 ] ] , [ [ 11 , 7 , 3 ] , [ 9 , 5 , 1 ] ] ] ) ) ;
1808
+ assert ! ( b. as_slice_memory_order( ) . is_some( ) ) ;
1809
+
1810
+ b. invert_axis ( Axis ( 0 ) ) ;
1811
+ assert_eq ! ( b, arr3( & [ [ [ 11 , 7 , 3 ] , [ 9 , 5 , 1 ] ] , [ [ 10 , 6 , 2 ] , [ 8 , 4 , 0 ] ] ] ) ) ;
1812
+ assert ! ( b. as_slice_memory_order( ) . is_some( ) ) ;
1813
+
1814
+ let mut c = b. reversed_axes ( ) ;
1815
+ assert_eq ! (
1816
+ c,
1817
+ arr3( & [ [ [ 11 , 10 ] , [ 9 , 8 ] ] , [ [ 7 , 6 ] , [ 5 , 4 ] ] , [ [ 3 , 2 ] , [ 1 , 0 ] ] ] )
1818
+ ) ;
1819
+ assert ! ( c. as_slice_memory_order( ) . is_some( ) ) ;
1820
+
1821
+ c. merge_axes ( Axis ( 1 ) , Axis ( 2 ) ) ;
1822
+ assert_eq ! ( c, arr3( & [ [ [ 11 , 10 , 9 , 8 ] ] , [ [ 7 , 6 , 5 , 4 ] ] , [ [ 3 , 2 , 1 , 0 ] ] ] ) ) ;
1823
+ assert ! ( c. as_slice_memory_order( ) . is_some( ) ) ;
1824
+
1825
+ let d = b. remove_axis ( Axis ( 1 ) ) ;
1826
+ assert_eq ! ( d, arr2( & [ [ 11 , 7 , 3 ] , [ 10 , 6 , 2 ] ] ) ) ;
1827
+ assert ! ( d. as_slice_memory_order( ) . is_none( ) ) ;
1828
+
1829
+ let e = b. remove_axis ( Axis ( 2 ) ) ;
1830
+ assert_eq ! ( e, arr2( & [ [ 11 , 9 ] , [ 10 , 8 ] ] ) ) ;
1831
+ assert ! ( e. as_slice_memory_order( ) . is_some( ) ) ;
1832
+
1833
+ let f = e. insert_axis ( Axis ( 2 ) ) ;
1834
+ assert_eq ! ( f, arr3( & [ [ [ 11 ] , [ 9 ] ] , [ [ 10 ] , [ 8 ] ] ] ) ) ;
1835
+ assert ! ( f. as_slice_memory_order( ) . is_some( ) ) ;
1836
+
1837
+ let mut g = b. clone ( ) ;
1838
+ g. collapse_axis ( Axis ( 1 ) , 0 ) ;
1839
+ assert_eq ! ( g, arr3( & [ [ [ 11 , 7 , 3 ] ] , [ [ 10 , 6 , 2 ] ] ] ) ) ;
1840
+ assert ! ( g. as_slice_memory_order( ) . is_none( ) ) ;
1841
+
1842
+ b. collapse_axis ( Axis ( 2 ) , 0 ) ;
1843
+ assert_eq ! ( b, arr3( & [ [ [ 11 ] , [ 9 ] ] , [ [ 10 ] , [ 8 ] ] ] ) ) ;
1844
+ assert ! ( b. as_slice_memory_order( ) . is_some( ) ) ;
1845
+ }
1846
+
1789
1847
#[ test]
1790
1848
fn test_swap ( ) {
1791
1849
let mut a = arr2 ( & [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] ) ;
0 commit comments