* Bug #14038 fixed - Encoded integers were no longer accepted for list extraction.
[scilab.git] / scilab / modules / umfpack / tests / unit_tests / umf_luget.tst
1 // ============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2007-2008 - Bruno PINCON
4 // Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // ============================================================================
8
9 // <-- CLI SHELL MODE -->
10
11 assert_checkfalse(execstr("umf_luget()"   ,"errcatch") == 0);
12 refMsg = msprintf(_("%s: Wrong number of input argument(s): %d expected.\n"), "umf_luget", 1);
13 assert_checkerror("umf_luget()", refMsg);
14
15 assert_checkfalse(execstr("umf_luget(1)"   ,"errcatch") == 0);
16 refMsg = msprintf(_("%s: Wrong type for input argument #%d: A pointer expected.\n"), "umf_luget", 1);
17 assert_checkerror("umf_luget(1)", refMsg);
18
19 // this is the test matrix from UMFPACK
20
21 A = sparse( [ 2  3  0  0  0;
22               3  0  4  0  6; 
23               0 -1 -3  2  0; 
24               0  0  1  0  0; 
25               0  4  2  0  1] );
26 Lup = umf_lufact(A);
27 [L,U,p,q,R] = umf_luget(Lup);
28
29 assert_checkequal(nnz(L), 9);
30 assert_checkequal(nnz(U), 9);
31
32 assert_checkfalse(or(p <> [ 3; 4; 1; 5; 2 ]));
33 assert_checkfalse(or(q <> [ 4; 3; 1; 5; 2 ]));
34 assert_checkfalse(or(R <> [ 5; 13; 6; 1; 7 ]));
35
36 B = A;
37 for i=1:5, B(i,:) = B(i,:)/R(i); end // apply the row scaling
38 B(p,q) - L*U;  // must be a (quasi) nul matrix
39
40 assert_checkequal(nnz(L*U), 13);
41 assert_checkequal(nnz(B(p,q)), 12);
42
43 umf_ludel(Lup); // clear memory
44
45 // the same with a complex matrix
46 A = sparse( [ 2+%i  3+2*%i  0      0    0;
47               3-%i  0       4+%i   0    6-3*%i; 
48               0    -1+%i   -3+6*%i 2-%i 0; 
49               0     0       1-5*%i 0    0; 
50               0     4       2-%i   0    1] );
51 Lup = umf_lufact(A);
52 [L,U,p,q,R] = umf_luget(Lup);
53
54 assert_checkequal(nnz(L), 9);
55 assert_checkequal(nnz(U), 9);
56
57 assert_checkfalse(or(p <> [ 3; 4; 1; 5; 2 ]));
58 assert_checkfalse(or(q <> [ 4; 3; 1; 5; 2 ]));
59 assert_checkfalse(or(R <> [ 8; 18; 14; 6; 8 ]));
60
61 B = A;
62 for i=1:5, B(i,:) = B(i,:)/R(i); end // apply the row scaling
63 B(p,q) - L*U;  // must be a (quasi) nul matrix
64 assert_checkequal(nnz(B(p,q)), 12);
65 assert_checkequal(nnz(L*U), 13);
66
67 umf_ludel(Lup) // clear memory