* Bugs 16090 16163 fixed: prbs_a(n,nc) infringed nc & slow. Page overhauled
[scilab.git] / scilab / modules / cacsd / tests / unit_tests / prbs_a.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2019 - Samuel GOUGEON
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- CLI SHELL MODE -->
8 // <-- NO CHECK REF -->
9
10 // --------------------------
11 // Unitary tests for prbs_a()
12 // --------------------------
13
14 // Checking the output size
15 assert_checkequal(size(prbs_a(0, 7)), [0 0]);
16 assert_checkequal(size(prbs_a(100, 0)), [1 100]);
17 assert_checkequal(size(prbs_a(100,20)), [1 100]);
18 assert_checkequal(size(prbs_a(100,99)), [1 100]);
19
20 // Checking the number of switches
21 [?,k] = gsort(rand(1,98));
22 for i = [k(1:19) 99] // 20 random unique numbers in [1, 99], 99 mandatory
23     tmp = prbs_a(100, i);
24     assert_checkequal(sum(tmp(2:$)<>tmp(1:$-1)), i);
25 end
26 // Checking state values
27 assert_checkequal(prbs_a(0, 5), []);
28 for i = [k(1:19) 99]
29     tmp = unique(prbs_a(100, i));
30     assert_checkequal(tmp, [-1 1]);
31 end
32
33 // Checking the equiprobability of the initial state
34 tmp = []
35 for i = 1:100
36     tmp = [tmp prbs_a(10,4)(1)];
37 end
38 assert_checktrue(abs(sum(tmp==1)/100-0.5)<0.15);
39
40
41 // Switches at given positions
42 // ---------------------------
43 for nc = [-7 0 5 15 30]    // In this case, nc is ignored
44     tmp = prbs_a(20, nc, [6 2 13]);
45     assert_checkequal(size(tmp), [1 20]);    // Checking size
46     assert_checkequal(unique(tmp), [-1 1]);  // Checking state values
47     tmp = tmp(2:$)<>tmp(1:$-1)
48     assert_checkequal(sum(tmp), 3);          // Checking number of switches
49     assert_checkequal(find(tmp), [2 6 13]);  // Checking the position of switches
50 end