* Bug #8210 fixed - Inserting UMFPACK examples in the Demos gui as demos
[scilab.git] / scilab / modules / umfpack / tests / unit_tests / utm300.tst
1 // ============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2007-2008 - Sylvestre LEDRU
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // ============================================================================
7
8 // <-- CLI SHELL MODE -->
9
10 // Check value provided here:
11 // http://math.nist.gov/MatrixMarket/data/SPARSKIT/tokamak/utm300.html
12 warning("off");
13
14 [A, dsc]=ReadHBSparse(SCI+"/modules/umfpack/demos/utm300.rua");
15 if dsc <> "utm300" then pause, end
16
17 [nl,nc] = size(A)
18 if nl <> 300 then pause, end
19 if nc <> 300 then pause, end
20 if nnz(A) <> 3155 then pause, end
21
22 // Diagonal
23 if nnz(diag(A)) <> 300 then pause, end
24
25 // A-A'
26 if nnz(A-A') <> 4382 then pause, end
27
28 // Heaviest diagonals
29 offsets = [ 0 -50 50 1 -1 -5 5 2 -2 -4 ];
30 nonzerosExpected = [ 300 190 186 180 166 159 158 150 134 113 ];
31
32 for j=1:length(offsets)
33     if nnz(diag(A, offsets(j))) <> nonzerosExpected(j) then pause, end
34 end
35
36 // TODO add the rest of information
37
38 [ij]=spget(A);
39 e=ij(:,1)-ij(:,2);
40
41 // Bandwidths average |i-j|
42 m=ceil(mean(abs(e)));
43 if m <> 21 then pause, end
44
45 // Bandwidths std.dev.
46 d=ceil(stdev(abs(e)));
47 if d <> 23 then pause, end
48
49 lastinrow=[find(diff(ij(:,1))>0) size(ij,1)];
50 rowlength=diff([0 lastinrow]);
51
52 // Row Data
53 [longest,indlongest]=max(rowlength);
54 if longest <> 33 then pause, end
55 if indlongest <> 116 then pause, end
56
57 [shortest,indshortest]=min(rowlength);
58 if shortest <> 1 then pause, end
59 if indshortest <> 3 then pause, end
60
61 // Average nonzeros per row
62 m=ceil(mean(rowlength));
63 if m <> 11 then pause, end
64
65 d=round(stdev(rowlength)*10)/10;
66 if d <> 7.7 then pause, end
67
68 // Column Data
69 ji=gsort(ij(:,[2 1]),"lr","i");
70 lastincol=[find(diff(ji(:,1))>0) size(ji,1)];
71 collength=diff([0 lastincol]);
72
73 [longest,indlongest]=max(collength);
74 if longest <> 22 then pause, end
75 if indlongest <> 59 then pause, end
76
77 [shortest,indshortest]=min(collength);
78 if shortest <> 1 then pause, end
79 if indshortest <> 16 then pause, end
80
81 m=ceil(mean(collength));
82 if m <> 11 then pause, end
83
84 d=round(stdev(collength)*10)/10;
85 if d <> 7.1 then pause, end
86
87 // Profile Storage
88 lastinrow=[find(diff(ij(:,1))>0) size(ij,1)];
89 rowbounds= [ij([1 lastinrow(1:$-1)+1],2) ij(lastinrow,2)];
90 rowindex=ij(lastinrow,1);
91 rowbandwidth=rowbounds-rowindex*ones(1,2);
92 lowband=[-rowbandwidth(find(rowbandwidth(:,1)<=0),1)
93 -rowbandwidth(find(rowbandwidth(:,2)<=0),2)];
94 uppband=[rowbandwidth(find(rowbandwidth(:,1)>=0),1)
95 rowbandwidth(find(rowbandwidth(:,2)>=0),2)];
96
97 // lower bandwidth => max
98 minlow=max(lowband);
99 if minlow <> 74 then pause, end
100
101 // lower bandwidth => min
102 maxlow=min(lowband);
103 if maxlow <> 0 then pause, end
104
105 // upper bandwidth => max
106 maxupp=max(uppband);
107 if maxupp <> 66 then pause, end
108
109 // upper bandwidth => min
110 minupp=min(uppband);
111 if minupp <> 0 then pause, end
112