* Bug 16369 fixed: sparse right divisions / restored
[scilab.git] / scilab / modules / sparse / tests / unit_tests / sparse_divide.tst
1
2 // =============================================================================
3 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 // Copyright (C) 2020 - 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 A = list(rand(4,5), rand(4,5) + rand(4,5)*%i, ..
13          sprand(4,5,0.5), sprand(4,5,0.5) + sprand(4,5,0.5)*%i);
14 B = list(rand(5,6), rand(5,6)+rand(5,6)*%i, ..
15          sprand(5,6,0.5), sprand(5,6,0.5) + sprand(5,6,0.5)*%i);
16
17 // ----------------
18 // RIGHT DIVISION /
19 // ----------------
20 // p = a * b   => a = p / b
21 // b rectangular
22 // -------------
23 for a = A
24     isspa = issparse(a)
25     for b = B
26         isspb = issparse(b)
27         // complex sparse / complex sparse is not supported
28         if ~isspa & ~isspb | (isspa & isspb & (~isreal(a) | ~isreal(b)))
29             continue
30         end
31         p = a * b;
32         a2 = p / b;
33         if ~issparse(p) | ~isspb
34             assert_checkfalse(issparse(a2));
35         else
36             assert_checktrue(issparse(a2));
37         end
38         assert_checkequal(size(a2), size(a));
39         assert_checkalmostequal(clean(a2*b,%eps,%eps), p);
40     end
41 end
42 // Square b
43 // --------
44 SB = list(rand(5,5), rand(5,5)+rand(5,5)*%i, ..
45          sprand(5,5,0.5), sprand(5,5,0.5) + sprand(5,5,0.5)*%i);
46 for a = A
47     isspa = issparse(a)
48     for b = SB
49         isspb = issparse(b)
50         if ~isspa & ~isspb
51             continue
52         end
53         p = a * b;
54         a2 = p / b;
55         if ~issparse(p) | ~isspb
56             assert_checkfalse(issparse(a2));
57         else
58             assert_checktrue(issparse(a2));
59         end
60         assert_checkequal(size(a2), size(a));
61         assert_checkalmostequal(clean(a2*b,%eps,%eps), p);
62     end
63 end
64
65 // ---------------
66 // LEFT DIVISION \
67 // ---------------
68 // p = a * b   => b = a \ p
69 // a rectangular
70 // -------------
71 for a = A
72     isspa = issparse(a)
73     for b = B
74         isspb = issparse(b)
75         // complex sparse \ complex sparse is not supported
76         if ~isspa & ~isspb | (isspa & isspb & (~isreal(a) | ~isreal(b)))
77             continue
78         end
79         p = a * b;
80         b2 = a \ p;
81         if ~isspa | ~issparse(p)
82             assert_checkfalse(issparse(b2));
83         else
84             assert_checktrue(issparse(b2));
85         end
86         assert_checkequal(size(b2), size(b));
87         assert_checkalmostequal(clean(a*b2,%eps,%eps), p);
88     end
89 end
90 // Square a
91 // --------
92 // A = SB
93 for a = SB
94     isspa = issparse(a)
95     for b = B
96         isspb = issparse(b)
97         if ~isspa & ~isspb
98             continue
99         end
100         p = a * b;
101         b2 = a \ p;
102         if ~isspa | ~issparse(p)
103             assert_checkfalse(issparse(b2));
104         else
105             assert_checktrue(issparse(b2));
106         end
107         assert_checkequal(size(b2), size(b));
108         assert_checkalmostequal(clean(a*b2,%eps,%eps), p);
109     end
110 end
111