* Bug 15898 fixed: edit() with user-defined | alias of macro
[scilab.git] / scilab / modules / sparse / tests / unit_tests / sprand.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2010-2011 - DIGITEO - Michael Baudin
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- CLI SHELL MODE -->
8 // Check default "typ" = "uniform"
9 rand("seed",0);
10 grand("setsd",0);
11 nrows = 1000;
12 ncols = 2000;
13 density = 1/100;
14 s=sprand(nrows,ncols,density);
15 assert_checkequal ( size(s) , [nrows,ncols] );
16 nnzs=nnz(s);
17 [ij,values]=spget(s);
18 assert_checkequal ( min(values) >= 0 , %t );
19 assert_checkequal ( max(values) <= 1 , %t );
20 assert_checkalmostequal ( mean(values) , 0.5 , 1.e-2 );
21 // Get empty matrix
22 s=sprand(0,0,0.01);
23 assert_checkequal ( s , [] );
24 // Test the scientific part
25 // In the following script, we check that the entries of the matrix have the expected distribution. 
26 // We use the spget function in order to get the nonzero entries. 
27 // Then we compute the min, mean and max of the entries and compare them with the limit values.
28 rand("seed",0);
29 grand("setsd",0);
30 typ = "normal";
31 nrows = 1000;
32 ncols = 2000;
33 density = 1/100;
34 s=sprand(nrows,ncols,density,typ);
35 assert_checkequal ( size(s) , [nrows,ncols] );
36 nnzs=nnz(s);
37 [ij,values]=spget(s);
38 assert_checkequal ( nnzs > 10000 , %t );
39 assert_checkequal ( min(values) < -3 , %t );
40 assert_checkalmostequal ( mean(values) , 0 , [] , 1.e-2 );
41 assert_checkequal ( max(values) > 3 , %t );
42 assert_checkalmostequal ( variance(values) , 1 , 1.e-2 );
43 rand("seed",0);
44 grand("setsd",0);
45 typ = "uniform";
46 nrows = 1000;
47 ncols = 2000;
48 density = 1/100;
49 s=sprand(nrows,ncols,density,typ);
50 assert_checkequal ( size(s) , [nrows,ncols] );
51 nnzs=nnz(s);
52 [ij,values]=spget(s);
53 assert_checkequal ( nnzs > 10000 , %t );
54 assert_checkalmostequal ( min(values) , 0 , [] , 1.e-2 );
55 assert_checkalmostequal ( mean(values) , 0.5 , 1.e-2 );
56 assert_checkalmostequal ( max(values) , 1 , 1.e-2 );
57 assert_checkalmostequal ( variance(values) , 1/12 , 1.e-2 );
58 // In the following script, we check that the entry indices, 
59 // which are also chosen at random, have the correct distribution. 
60 // We generate kmax sparse random matrices with uniform distribution. 
61 // For each matrix, we consider the indices of the nonzero entries 
62 // which were generated, i.e. we see if the event Aij = {the entry (i,j) is nonzero}
63 // occurred for each i and j, for i=1,2,...,nrows and j=1,2,...,ncols. 
64 // The matrix C(i,j) stores the number of times that the event Aij occurred. 
65 // The matrix R(k) stores the actual density of the try number k, where k=1,2,...,kmax.
66 rand("seed",0);
67 grand("setsd",0);
68 kmax = 1000;
69 ncols=100;
70 nrows=100;
71 density=0.01;
72 typ="uniform";
73 C=zeros(nrows,ncols);
74 R=[];
75 for k=1:kmax
76   M=sprand(nrows,ncols,density,typ);
77   NZ=find(M<>0);
78   NZratio = size(NZ,"*")/(nrows*ncols);
79   R=[R NZratio];
80   C(NZ)=C(NZ)+1;
81 end
82 // Now that this algorithm has been performed (which may require some time), 
83 // we can compute elementary statistics to check that the algorithm performed well.
84 // The average number should be close to the expectation.
85 assert_checkalmostequal ( density*kmax , mean(C) , 1.e-2 );
86 // The density should be close to expected density
87 assert_checkalmostequal ( density , mean(R) , 1.e-2 );
88 // More deeper tests should involve the particular distribution of 
89 // C, which follows a binomial law.
90 // May be a chi-square test should be used for this.