* Bug 15428 fixed: repmat() was slow: rewritten => > 7x faster
[scilab.git] / scilab / modules / elementary_functions / tests / unit_tests / repmat.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2011 - INRIA - Serge Steer
4 // Copyright (C) 2018 - Samuel GOUGEON
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8
9 // <-- CLI SHELL MODE -->
10 // <-- NO CHECK REF -->
11
12 assert_checkequal(repmat(1:3,2,2),[1,2,3,1,2,3;1,2,3,1,2,3]);
13 assert_checkequal(repmat(1+2*%i,2),[ 1+%i*2, 1+%i*2; 1+%i*2, 1+%i*2]);
14 a=int8([1 0 1;0 1 0]);
15 assert_checkequal(repmat(a,2,3,2),matrix(int8([1;0;1;0;0;1;0;1;1;0;1;0;1;0;1;0;0;1; ...
16 0;1;1;0;1;0;1;0;1;0;0;1;0;1;1;0;1;0;1;0;1;0;0;1;0;1; ...
17 1;0;1;0;1;0;1;0;0;1;0;1;1;0;1;0;1;0;1;0;0;1;0;1;1;0; ...
18 1;0]),4,9,2));
19 assert_checkequal(repmat("Scilab",3,2),["Scilab","Scilab";"Scilab","Scilab";"Scilab","Scilab"]);
20 H=repmat([1/%s;2/(%s+1)],1,3);
21 s=poly(0,"s");
22 H_ref=[1/s,1/s,1/s;2/(1+s),2/(1+s),2/(1+s)];
23 assert_checkequal(H.num, H_ref.num);
24 assert_checkequal(H.den, H_ref.den);
25 assert_checkequal(repmat([],2,2),[]);
26 B_ref=int8(matrix([1;3;7;15;31;63;127;55;1;3;7;15;31;63;127;55], [2 4 2]));
27 assert_checkequal(repmat(int8([1,7,31,127;3,15,63,55]),1,1,2),B_ref);
28 C_ref = matrix(1:24, [2 3 2 2]);
29 assert_checkequal(repmat(C_ref,1),C_ref);
30 assert_checkequal(repmat(1:2, 2),[1 2 1 2; 1 2 1 2]);
31 assert_checkequal(repmat(matrix(1:2, [1 2]),2),[1 2 1 2; 1 2 1 2]);
32 assert_checkequal(repmat([1,2;3,4],[2,3]),[1,2,1,2,1,2;3,4,3,4,3,4;1,2,1,2,1,2;3,4,3,4,3,4]);
33 assert_checkequal(repmat(int8([1,2;3,4]),[2,3]),int8([1,2,1,2,1,2;3,4,3,4,3,4;1,2,1,2,1,2;3,4,3,4,3,4]));
34 assert_checkequal(repmat(matrix(1:2, 1, 2),[2,3]),[1,2,1,2,1,2;1,2,1,2,1,2]);
35
36 // With other hypermatrices
37     // Polynomials
38 H = repmat([%z %z^2], [1 2 2]);
39 res = cat(3, [%z %z^2 %z %z^2], [%z %z^2 %z %z^2]);
40 assert_checkequal(H,res);
41 H = repmat(cat(3,[%z %z^2],[1 %z]), 1, 2);
42 res = cat(3, [%z %z^2 %z %z^2], [1 %z 1 %z]);
43 assert_checkequal(H,res);
44     // Rationals
45 H = repmat(1./[%z %z^2], [1 2 2]);
46 res = cat(3, 1./[%z %z^2 %z %z^2], 1./[%z %z^2 %z %z^2]);
47 assert_checkequal(H,res);
48 H = repmat(1./cat(3,[%z %z^2],[1 %z]), 1, 2);
49 res = cat(3, 1./[%z %z^2 %z %z^2], 1./[1 %z 1 %z]);
50 assert_checkequal(H,res);
51     // Booleans
52 H = repmat([%t %f ; %f %t], [1 2 2]);
53 res = cat(3, [%t %f %t %f; %f %t %f %t], [%t %f %t %f; %f %t %f %t]);
54 assert_checkequal(H,res);
55 H = repmat(cat(3,[%f %t %t],[%t %f %t]), 2, 1);
56 res = cat(3, [%f %t %t ; %f %t %t], [%t %f %t; %t %f %t]);
57 assert_checkequal(H,res);
58     // Texts
59 H = repmat(["a" "b" ; "c" "d"], [2 1 2]);
60 res = cat(3, ["a" "b" ; "c" "d" ; "a" "b" ; "c" "d"], ..
61              ["a" "b" ; "c" "d" ; "a" "b" ; "c" "d"]);
62 assert_checkequal(H, res);
63 H = repmat(cat(3,"a", "b", "c"), 2,3,2);
64 res = cat(3,["a" "a" "a"; "a" "a" "a"],["b" "b" "b"; "b" "b" "b"],["c" "c" "c"; "c" "c" "c"]);
65 res = cat(3, res, res);
66 assert_checkequal(H, res);
67