/[ascend]/branches/fprops-incomp/ascend/general/test/test_ltmatrix.c
ViewVC logotype

Annotation of /branches/fprops-incomp/ascend/general/test/test_ltmatrix.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3438 - (hide annotations) (download) (as text)
Tue Feb 4 00:47:59 2020 UTC (2 years, 6 months ago) by jpye
File MIME type: text/x-csrc
File size: 6050 byte(s)
test output goes to stderr, stdout is for cunit progress reporting.

1 mahesh 2130 /* ASCEND modelling environment
2     Copyright (C) 2007 Carnegie Mellon University
3    
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2, or (at your option)
7     any later version.
8    
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12     GNU General Public License for more details.
13    
14     You should have received a copy of the GNU General Public License
15 jpye 2648 along with this program. If not, see <http://www.gnu.org/licenses/>.
16 mahesh 2130 */
17    
18     #include <CUnit/CUnit.h>
19 jpye 2324 #include <ascend/general/platform.h>
20 mahesh 2130 #include <ascend/general/ltmatrix.h>
21    
22 jpye 2346 #include "test/common.h"
23    
24 jpye 3438 //#define LTMATRIX_DEBUG
25     #ifdef LTMATRIX_DEBUG
26     # define TEST_LTMATRIX_PRINT(MTX) ltmatrix_debug_print(MTX)
27     #else
28     # define TEST_LTMATRIX_PRINT(MTX)
29     #endif
30    
31 jpye 3258 #ifndef MEMUSED
32     # define MEMUSED(N) CU_TEST(ascmeminuse()==(N))
33     #endif
34 mahesh 2130
35 jpye 3258 static void ltmatrix_fill_pattern(ltmatrix* matrix, int pattern);
36     static int ltmatrix_check_pattern(ltmatrix* matrix, int pattern);
37    
38 mahesh 2130 static void test_ltmatrix(void){
39     double array[] = {0.1,-1.2,2.3,-3.4,4.5,-5.6,6.7,-7.8,8.9,-9.0};
40     /** Performing CRUD Operations on LTMatrix library */
41 jpye 3258 ltmatrix *matrix_upper;
42     ltmatrix *matrix_lower;
43     ltmatrix *matrix_full;
44 mahesh 2130
45     /** Upper Matrix Operations */
46     /** Create Operations */
47 jpye 3258 matrix_upper = ltmatrix_create(LTMATRIX_UPPER,4);
48     CU_ASSERT(matrix_upper->access_type == LTMATRIX_UPPER);
49 mahesh 2130 CU_ASSERT(matrix_upper->dimension == 4);
50     CU_ASSERT(matrix_upper->len == 10);
51     CU_ASSERT(matrix_upper->h!=NULL);
52     /** Read Operations */
53     /** Done with Range checks in the Access Method. */
54 jpye 3438 TEST_LTMATRIX_PRINT(matrix_upper); /** Success Prints Matrix of 5x5 with all elements 0.0 */
55    
56 mahesh 2130 /** Update Operations */
57 jpye 3258 ltmatrix_init(matrix_upper,array);
58     CU_ASSERT(ltmatrix_compare_array(matrix_upper,array)==1);
59 jpye 3438
60     TEST_LTMATRIX_PRINT(matrix_upper);
61 jpye 3258 ltmatrix_clear(matrix_upper);
62 jpye 3438 TEST_LTMATRIX_PRINT(matrix_upper);
63 mahesh 2130
64     /** Lower Matrix Operations */
65     /** Create Operations */
66 jpye 3258 matrix_lower = ltmatrix_create(LTMATRIX_LOWER,4);
67     CU_ASSERT(matrix_lower->access_type == LTMATRIX_LOWER);
68 mahesh 2130 CU_ASSERT(matrix_lower->dimension == 4);
69     CU_ASSERT(matrix_lower->len == 10);
70     CU_ASSERT(matrix_lower->h!=NULL);
71     /** Read Operations */
72     /** Done with Range checks in the Access Method. */
73 jpye 3438 TEST_LTMATRIX_PRINT(matrix_lower); /** Success Prints Matrix of 5x5 with all elements 0.0 */
74 mahesh 2130 /** Update Operations */
75 jpye 3258 ltmatrix_init(matrix_lower,array);
76     CU_ASSERT(ltmatrix_compare_array(matrix_lower,array)==1);
77 jpye 3438 TEST_LTMATRIX_PRINT(matrix_lower);
78 jpye 3258 ltmatrix_clear(matrix_lower);
79 jpye 3438 TEST_LTMATRIX_PRINT(matrix_lower);
80 mahesh 2130
81     /** Full Matrix Operations */
82     /** Create Operations */
83 jpye 3258 matrix_full = ltmatrix_create(LTMATRIX_FULL,4);
84     CU_ASSERT(matrix_full->access_type == LTMATRIX_FULL);
85 mahesh 2130 CU_ASSERT(matrix_full->dimension == 4);
86     CU_ASSERT(matrix_full->len == 16);
87     CU_ASSERT(matrix_full->h!=NULL);
88     /** Read Operations */
89     /** Done with Range checks in the Access Method. */
90 jpye 3438 TEST_LTMATRIX_PRINT(matrix_full); /** Success Prints Matrix of 5x5 with all elements 0.0 */
91 mahesh 2130
92    
93     /** Pattern all the Hessian Matrices */
94 jpye 3258 ltmatrix_fill_pattern(matrix_upper,0);
95     CU_ASSERT(ltmatrix_check_pattern(matrix_upper,0)==1);
96 mahesh 2130
97 jpye 3258 ltmatrix_fill_pattern(matrix_lower,0);
98     CU_ASSERT(ltmatrix_check_pattern(matrix_lower,0)==1);
99 mahesh 2130
100 jpye 3258 ltmatrix_fill_pattern(matrix_full,0);
101     CU_ASSERT(ltmatrix_check_pattern(matrix_full,0)==1);
102 mahesh 2130
103     /** Print for one last time the Matrices */
104    
105 jpye 3438 TEST_LTMATRIX_PRINT(matrix_lower);
106     TEST_LTMATRIX_PRINT(matrix_upper);
107     TEST_LTMATRIX_PRINT(matrix_full);
108 mahesh 2130
109    
110     /** Delete Operations */
111 jpye 3258 ltmatrix_destroy(matrix_upper);
112     ltmatrix_destroy(matrix_lower);
113     ltmatrix_destroy(matrix_full);
114 mahesh 2130 }
115    
116     /**
117     Fills patterns in the given matrix
118     @param matrix is the matrix in which a given pattern is stored
119     @param pattern is the type of pattern one wants to store.
120     0 - matrix[row][col] = ((row+1)*(col+1)+1)
121     */
122 jpye 3258 static void ltmatrix_fill_pattern(ltmatrix* matrix, int pattern){
123     ltmatrix_test_validity(matrix);
124 mahesh 2130 unsigned long i, j;
125     switch(pattern){
126     case 0:
127     for (i = 0; i < matrix->dimension; i++)
128     {
129     for (j = 0 ; j < matrix->dimension; j++){
130 jpye 3258 ltmatrix_set_element(matrix,i,j,((i+1)*(j+1)+1));
131 mahesh 2130 }
132     }
133     break;
134     }
135     }
136    
137     /**
138     Checks the pattern in the given matrix
139     @param matrix is the matrix in which a given pattern is stored
140     @param pattern is the type of pattern one wants to check.
141     0 - matrix[row][col] = ((row+1)*(col+1)+1)
142     */
143 jpye 3258 static int ltmatrix_check_pattern(ltmatrix* matrix, int pattern){
144     ltmatrix_test_validity(matrix);
145 mahesh 2130 unsigned long i, j;
146     switch(pattern){
147     case 0:
148     for (i = 0; i < matrix->dimension; i++)
149     {
150     for (j = 0 ; j < matrix->dimension; j++){
151 jpye 3258 if(ltmatrix_get_element(matrix,i,j)!=((i+1)*(j+1)+1))
152 mahesh 2130 {
153     return 0;
154     }
155     }
156     }
157     break;
158     default:
159     return 0;
160     }
161     return 1;
162     }
163 jpye 3258
164     //-------------------------
165    
166     static void test_compare(void){
167     ltmatrix *m1 = ltmatrix_create(LTMATRIX_UPPER,3);
168     double *r = ltmatrix_get_row_pointer(m1,0);
169     r[0] = 1.;
170     r[1] = 2.;
171     r[2] = 3.;
172     ltmatrix_set_element(m1,1,1,4.);
173     ltmatrix_set_element(m1,2,1,5.);
174     ltmatrix_set_element(m1,2,2,6.);
175    
176     CU_TEST(ltmatrix_get_element(m1,0,0)==1.);
177     CU_TEST(ltmatrix_get_element(m1,1,0)==2.);
178     CU_TEST(ltmatrix_get_element(m1,0,1)==2.);
179     CU_TEST(ltmatrix_get_element(m1,2,0)==3.);
180     CU_TEST(ltmatrix_get_element(m1,0,2)==3.);
181     CU_TEST(ltmatrix_get_element(m1,1,1)==4.);
182     CU_TEST(ltmatrix_get_element(m1,1,2)==5.);
183     CU_TEST(ltmatrix_get_element(m1,2,2)==6.);
184    
185     ltmatrix *m2 = ltmatrix_create(LTMATRIX_UPPER,3);
186     ltmatrix_init(m2,(double[]){1,2,3,4,5,6});
187     CU_TEST(ltmatrix_compare(m1,m2)==1);
188 jpye 3438 TEST_LTMATRIX_PRINT(m1);
189 jpye 3258 ltmatrix_destroy(m1);
190     ltmatrix_destroy(m2);
191     MEMUSED(0);
192     }
193    
194 mahesh 2130 /*===========================================================================*/
195     /* Registration information */
196    
197 jpye 2346 #define TESTS(T) \
198 jpye 3258 T(ltmatrix) \
199     T(compare)
200 mahesh 2130
201 jpye 2346 REGISTER_TESTS_SIMPLE(general_ltmatrix, TESTS);
202 mahesh 2130

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22