* Bug 7293 fixed: circshift() introduced
[scilab.git] / scilab / modules / elementary_functions / tests / unit_tests / circshift.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2017 - Samuel GOUGEON
4 //
5 // This file is hereby licensed under the terms of the GNU GPL v2.0,
6 // pursuant to article 5.3.4 of the CeCILL v.2.1.
7 // This file was originally licensed under the terms of the CeCILL v2.1,
8 // and continues to be available under such terms.
9 // For more information, see the COPYING file which you should have received
10 // along with this program.
11 // =============================================================================
12 //
13 // <-- CLI SHELL MODE -->
14 // <-- NO CHECK REF -->
15
16 // With []
17 assert_checkequal(circshift([], 1), []);
18 assert_checkequal(circshift([], 1, 2), []);
19 assert_checkequal(circshift([], 1, 0), []);
20
21 // With a row
22 assert_checkequal(circshift(1:9, 0), 1:9);
23 assert_checkequal(circshift(1:9, 1), [9 1:8]);
24 assert_checkequal(circshift(1:9, [2 1]), [9 1:8]);
25 assert_checkequal(circshift(1:9, [1 2], [2 1]), [9 1:8]);
26 assert_checkequal(circshift(1:9, -1), [2:9 1]);
27 assert_checkequal(circshift(1:9, [2 -1]), [2:9 1]);
28 assert_checkequal(circshift(1:9, [-1 2], [2 1]), [2:9 1]);
29 assert_checkequal(circshift(1:9, -2, 0), [3:9 1:2]);
30 assert_checkequal(circshift(1:9, [2 -2], [2 2]), 1:9);
31
32 // With a column
33 assert_checkequal(circshift((1:9)', 0), (1:9)');
34 assert_checkequal(circshift((1:9)', 1), [9 1:8]');
35 assert_checkequal(circshift((1:9)', [1 2]), [9 1:8]');
36 assert_checkequal(circshift((1:9)', [2 1], [2 1]), [9 1:8]');
37 assert_checkequal(circshift((1:9)', -1), [2:9 1]');
38 assert_checkequal(circshift((1:9)', [-1 2]), [2:9 1]');
39 assert_checkequal(circshift((1:9)', [2 -1], [2 1]), [2:9 1]');
40 assert_checkequal(circshift((1:9)', -2, 0), [3:9 1:2]');
41 assert_checkequal(circshift((1:9)', [2 -2], [1 1]), (1:9)');
42
43 // With a matrix
44 M = [1  2  3  4
45      5  6  7  8
46      9 10 11 12];
47 assert_checkequal(circshift(M, 0), M);
48 assert_checkequal(circshift(M, 1),  [9 10 11 12; 1  2  3  4; 5 6 7 8]);
49 assert_checkequal(circshift(M, -1), [5 6  7  8 ; 9 10 11 12; 1 2 3 4]);
50 assert_checkequal(circshift(M, [2 -2], [1 1]), M);
51 assert_checkequal(circshift(M, [2 -2], [2 2]), M);
52 assert_checkequal(circshift(M, 3), M);
53 assert_checkequal(circshift(M, -3), M);
54 assert_checkequal(circshift(M, 4, 2), M);
55 assert_checkequal(circshift(M, -4, 2), M);
56 assert_checkequal(circshift(M, [3 4], [1 2]), M);
57 assert_checkequal(circshift(M, [1 2], [1 2]), [11 12 9 10 ; 3 4 1 2 ; 7 8 5 6]);
58 assert_checkequal(circshift(M, [-2 -2], [1 2]), [11 12 9 10 ; 3 4 1 2 ; 7 8 5 6]);
59 assert_checkequal(circshift(M, 1, 0), [12 9 10 11 ; 1 2 3 4 ; 5 6 7 8]);
60 assert_checkequal(circshift(M, 3, 0), circshift(M,1,2));
61
62 // With shifts or/and dims specified as encoded integers:
63 // -----------------------------------------------------
64 assert_checkequal(circshift(M, int8(-3)), M);
65 assert_checkequal(circshift(M, 4, int8(2)), M);
66 assert_checkequal(circshift(M, int16(-4), uint8(2)), M);
67 assert_checkequal(circshift(M, uint8([3 4]), uint16([1 2])), M);
68
69
70 // With an hypermatrix of texts
71 // ============================
72 t = matrix([string(1:12) strsplit("a":"l")' strsplit("A":"L")'],3,4,3);
73 // t  =
74 //(:,:,1)
75 //!1  4  7  10  !
76 //!2  5  8  11  !
77 //!3  6  9  12  !
78 //
79 //(:,:,2)
80 //!a  d  g  j  !
81 //!b  e  h  k  !
82 //!c  f  i  l  !
83 //
84 //(:,:,3)
85 //!A  D  G  J  !
86 //!B  E  H  K  !
87 //!C  F  I  L  !
88 // ---------
89 expected = cat(3, ["L" "3" "6" "9" ; "1" "4" "7" "10"; "2" "5" "8" "11"], ..
90                   ["12" "c" "f" "i"; "a" "d" "g" "j" ; "b" "e" "h" "k" ], ..
91                   ["l" "C" "F" "I" ; "A" "D" "G" "J" ; "B" "E" "H" "K" ]);
92 assert_checkequal(circshift(t, 1, 0), expected);
93 //     ans  =
94 //    (:,:,1)
95 //    !L  3  6  9   !
96 //    !1  4  7  10  !
97 //    !2  5  8  11  !
98 //    (:,:,2)
99 //    !12  c  f  i  !
100 //    !a   d  g  j  !
101 //    !b   e  h  k  !
102 //    (:,:,3)
103 //    !l  C  F  I  !
104 //    !A  D  G  J  !
105 //    !B  E  H  K  !
106 // ---------
107 expected = cat(3, ["3" "6" "9" "12" ; "1" "4" "7" "10" ; "2" "5" "8" "11"], ..
108                   ["c" "f" "i" "l"  ; "a" "d" "g" "j"  ; "b" "e" "h" "k"], ..
109                   ["C" "F" "I" "L"  ; "A" "D" "G" "J"  ; "B" "E" "H" "K"]);
110 assert_checkequal(circshift(t, 1), expected);
111 //     ans  =
112 //    (:,:,1)
113 //    !3  6  9  12  !
114 //    !1  4  7  10  !
115 //    !2  5  8  11  !
116 //    (:,:,2)
117 //    !c  f  i  l  !
118 //    !a  d  g  j  !
119 //    !b  e  h  k  !
120 //    (:,:,3)
121 //    !C  F  I  L  !
122 //    !A  D  G  J  !
123 //    !B  E  H  K  !
124 // ---------
125 expected = cat(3, ["A" "D" "G" "J" ; "B" "E" "H" "K" ; "C" "F" "I" "L"], ..
126                   ["1" "4" "7" "10"; "2" "5" "8" "11"; "3" "6" "9" "12"], ..
127                   ["a" "d" "g" "j" ; "b" "e" "h" "k" ; "c" "f" "i" "l"]);
128 assert_checkequal(circshift(t, 1, 3), expected);
129 //     ans  =
130 //    (:,:,1)
131 //    !A  D  G  J  !
132 //    !B  E  H  K  !
133 //    !C  F  I  L  !
134 //    (:,:,2)
135 //    !1  4  7  10  !
136 //    !2  5  8  11  !
137 //    !3  6  9  12  !
138 //    (:,:,3)
139 //    !a  d  g  j  !
140 //    !b  e  h  k  !
141 //    !c  f  i  l  !
142 // ---------
143 expected = cat(3, ["j"  "a" "d" "g" ; "k" "b" "e" "h" ; "l" "c" "f" "i"], ..
144                   ["J"  "A" "D" "G" ; "K" "B" "E" "H" ; "L" "C" "F" "I"], ..
145                   ["10" "1" "4" "7"; "11" "2" "5" "8"; "12" "3" "6" "9"]);
146 assert_checkequal(circshift(t, [1 -1], [2 3]), expected);
147 //     ans  =
148 //    (:,:,1)
149 //    !j  a  d  g  !
150 //    !k  b  e  h  !
151 //    !l  c  f  i  !
152 //    (:,:,2)
153 //    !J  A  D  G  !
154 //    !K  B  E  H  !
155 //    !L  C  F  I  !
156 //    (:,:,3)
157 //    !10  1  4  7  !
158 //    !11  2  5  8  !
159 //    !12  3  6  9  !
160
161 // With a cell array
162 // =================
163 L = list(1,%t);
164 M = {%f "a" %i  %z
165      %t "b" %e  %s
166       0 "c" %pi L };
167 assert_checkequal(circshift(M, 0), M);
168 assert_checkequal(circshift(M, 1), {0 "c" %pi L ; %f "a" %i  %z ; %t "b" %e  %s});
169 assert_checkequal(circshift(M, -2), {0 "c" %pi L ; %f "a" %i  %z ; %t "b" %e  %s});
170 assert_checkequal(circshift(M, [2 -2], [1 1]), M);
171 assert_checkequal(circshift(M, [2 -2], [2 2]), M);
172 assert_checkequal(circshift(M, 3), M);
173 assert_checkequal(circshift(M, -3), M);
174 assert_checkequal(circshift(M, 4, 2), M);
175 assert_checkequal(circshift(M, -4, 2), M);
176 assert_checkequal(circshift(M, [3 4], [1 2]), M);
177 assert_checkequal(circshift(M, [1 2], [1 2]), {%pi L 0 "c" ; %i %z %f "a"; %e %s %t "b"});
178 assert_checkequal(circshift(M, [-2 -2],[1 2]),{%pi L 0 "c" ; %i %z %f "a"; %e %s %t "b"});
179