1function test28
2%TEST28 test cs_randperm, cs_dmperm
3%
4% Example:
5%   test28
6% See also: testall
7
8% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com
9
10clear functions
11
12rand ('state', 0) ;
13for n = 1:100
14    for trials = 1:1000
15        p = cs_randperm (n, rand) ;
16        if (any (sort (p) ~= 1:n))
17            n           %#ok
18            p           %#ok
19            error ('!')
20        end
21    end
22end
23
24index = ssget ;
25[ignore f] = sort (index.nnz) ;
26
27fprintf ('p=dmperm (std, rand, rev)  [p,q,r,s]=dmperm (std, rand, rev)\n') ;
28
29nmat = length (f) ;
30nmat = min (100, nmat) ;
31T1 = zeros (nmat,1) ;
32T2 = zeros (nmat,1) ;
33T3 = zeros (nmat,1) ;
34D1 = zeros (nmat,1) ;
35D2 = zeros (nmat,1) ;
36D3 = zeros (nmat,1) ;
37
38
39for k = 1:nmat
40
41    i = f (k) ;
42    Prob = ssget (i,index) ;
43    A = Prob.A ;
44    [m n] = size (A) ;
45    fprintf ('%35s: ', Prob.name) ;
46
47    if (~ispc)
48        if (rand () > .5)
49            A = A + 1i * sprand (A) ;
50        end
51    end
52
53    tic
54    p = cs_dmperm (A) ;
55    t1 = toc ;
56    sprank1 = sum (p > 0) ;
57    fprintf (' %8.2f', t1) ;
58    T1 (k) = t1 ;
59
60    tic
61    p = cs_dmperm (A,1) ;
62    t2 = toc ;
63    sprank2 = sum (p > 0) ;
64    fprintf (' %8.2f', t2) ;
65    T2 (k) = t2 ;
66
67    tic
68    p = cs_dmperm (A,-1) ;
69    t3 = toc ;
70    sprank3 = sum (p > 0) ;
71    fprintf (' %8.2f', t3) ;
72    T3 (k) = t3 ;
73
74    if (sprank1 ~= sprank2 | sprank1 ~= sprank3)                            %#ok
75        error ('!') ;
76    end
77
78    tic
79    [p1,q1,r1,s1,cc1,rr1] = cs_dmperm (A) ;                                 %#ok
80    d1 = toc ;
81    fprintf (' %8.2f', d1) ;
82    D1 (k) = d1 ;
83
84    tic
85    [p2,q2,r2,s2,cc2,rr2] = cs_dmperm (A,1) ;                               %#ok
86    d2 = toc ;
87    fprintf (' %8.2f', d2) ;
88    D2 (k) = d2 ;
89
90    tic
91    [p3,q3,r3,s3,cc3,rr3] = cs_dmperm (A,-1) ;                              %#ok
92    d3 = toc ;
93    fprintf (' %8.2f\n', d3) ;
94    D3 (k) = d3 ;
95
96    if (sprank1 == max (m,n))
97        nz1 = nnz (diag (A (p1,q1))) ;
98        nz2 = nnz (diag (A (p2,q2))) ;
99        nz3 = nnz (diag (A (p3,q3))) ;
100
101        if (nz1 ~= sprank1 | nz2 ~= sprank2 | nz3 ~= sprank3)               %#ok
102            error ('!')
103        end
104    end
105
106    subplot (1,2,1)
107    loglog (T1 (1:k), T2 (1:k), 'x', ...
108        T1 (1:k), T3 (1:k), 'go', ...
109        [1e-5 1e3], [1e-5 1e3], 'r-') ;
110    axis equal
111
112    subplot (1,2,2)
113    loglog (D1 (1:k), D2 (1:k), 'x', ...
114        D1 (1:k), D3 (1:k), 'go', ...
115        [1e-5 1e3], [1e-5 1e3], 'r-') ;
116    axis equal
117
118    drawnow
119end
120