1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //
8 // <-- Non-regression test for bug  -->
9 //
10 // <-- Bugzilla URL -->
11 // http://bugzilla.scilab.org/13409
12 //
13 // <-- Short Description -->
14 // permute(x, dims) failed when dims was greater than the dimensions of size(x)
15 // now permute treats extra dimensions as 1
16 //
17 // <-- CLI SHELL MODE -->
18 x = matrix(1:6, [2, 3]);
19 // x is of size 2, 2 so has 2 dimension
20 res = permute(x, [3 2 1]); // this permutes x across the 3rd dimension
21 // #Explanation
22 // Dimensions are changed according to dims
23 // * Number of lines becomes number of pages = 2
24 // * Number of columns is unchanged = 3
25 // * Number of pages becomes number of lines = 1
26 ref = [1 3 5];
27 ref(:,:,2) = [2 4 6];
28 assert_checkequal(res, ref);
29 // Check for extra dimensions
30 x = matrix(1:12, [3 2 2]);
31 res = permute(x, [2 3 1 4]);
32 // Dimensions are changed according to dims
33 // * Number of lines becomes number of columns = 2
34 // * Number of columns becomes number of pages = 2
35 // * Number of pages1 becomes number of lines = 3
36 // * Number of pages2 becomes number of pages2 = 1
37 // Extra dimension is squeezed
38 ref = permute(x, [2 3 1]);
39 assert_checkequal(res, ref);
40 x = matrix(1:12, [3 2 2]);
41 res = permute(x, [3 4 1 2]);
42 // Dimensions are changed according to dims
43 // * Number of lines becomes number of pages1 = 2
44 // * Number of columns becomes number of pages2 = 1
45 // * Number of pages1 becomes number of lines = 3
46 // * Number of pages2 becomes number of columns = 2
47 ref = [1 7]';
48 ref(:,:,2,1) = [2 8]';
49 ref(:,:,3,1) = [3 9]';
50 ref(:,:,1,2) = [4 10]';
51 ref(:,:,2,2) = [5 11]';
52 ref(:,:,3,2) = [6 12]';
53 assert_checkequal(res, ref);
54 x = matrix(1:12, [3 2 2]);
55 res = permute(x, 1:10);
56 // Extra dimensions are squeezed
57 assert_checkequal(x, res);
58 // Bug #13409 test case
59 dims=3; A1=matrix(1:12, [2,2,3]); A2=[13 14;15 16]; A3=matrix(21:36,[2,2,4]); y=cat(dims,A1,A2,A3);
60 assert_checkequal(A1, y(:,:,1:3));
61 assert_checkequal(A2, y(:,:,4));
62 assert_checkequal(A3, y(:,:,5:8));