@@ -1786,6 +1786,64 @@ fn test_contiguous() {
17861786 assert ! ( b. as_slice_memory_order( ) . is_some( ) ) ;
17871787}
17881788
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+
17891847#[ test]
17901848fn test_swap ( ) {
17911849 let mut a = arr2 ( & [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] ) ;
0 commit comments