|
gimme-alpha 0.1
|
00001 /* 00002 ** matdb-suite.c 00003 ** 00004 ** Made by (Johnny Q. Hacker) 00005 ** Login <solarion@borkborkbork> 00006 ** 00007 00008 Copyright (C) 2009 Joseph Pingenot 00009 00010 This program is free software: you can redistribute it and/or modify 00011 it under the terms of the GNU Affero General Public License as published by 00012 the Free Software Foundation, either version 3 of the License, or 00013 (at your option) any later version. 00014 00015 This program is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 GNU Affero General Public License for more details. 00019 00020 You should have received a copy of the GNU Affero General Public License 00021 along with this program. If not, see <http://www.gnu.org/licenses/>. 00022 00023 ** Started on Thu Mar 19 12:52:41 2009 Johnny Q. Hacker 00024 ** Last update Sun May 12 01:17:25 2002 Speed Blue 00025 */ 00026 00027 #include <math.h> 00028 #include <stdio.h> 00029 #include <CUnit/CUnit.h> 00030 #include "argdefaults.h" 00031 #include "matdb.h" 00032 #include "tests/matdb-suite.h" 00033 00034 struct matdb *mdb; 00035 00036 void create_matdb(void) { 00037 mdb = matdb_new(); 00038 CU_ASSERT(mdb != NULL); 00039 CU_ASSERT(mdb->materials != NULL); 00040 CU_ASSERT(mdb->bowings != NULL); 00041 } 00042 00043 void destroy_matdb(void) { 00044 matdb_destroy(mdb); 00045 } 00046 00047 /*Test to set and then get material 1 parameter 1*/ 00048 void set_get_material_1_1(void) { 00049 //fprintf(stderr, "set_get_material_1_1:"); 00050 double d = 0.5; 00051 int err; 00052 set_material_param(mdb, "material_1", "param_1", d, &err); 00053 CU_ASSERT(err == 0); 00054 double e = get_material_param(mdb, "material_1", "param_1", &err); 00055 //fprintf(stderr, "d=%g e=%g err=%d\n", d, e, err); 00056 CU_ASSERT(d == e); 00057 CU_ASSERT(err == 0); 00058 } 00059 00060 /*Test to set and then get material 1 parameter 2*/ 00061 void set_get_material_1_2(void) { 00062 //fprintf(stderr, "set_get_material_1_2\n"); 00063 double d = 73; 00064 int err; 00065 set_material_param(mdb, "material_1", "param_2", d, &err); 00066 CU_ASSERT(err == 0); 00067 double e = get_material_param(mdb, "material_1", "param_2", &err); 00068 CU_ASSERT(d == e); 00069 CU_ASSERT(err == 0); 00070 } 00071 00072 /*Test to set and then get material 2 parameter 1*/ 00073 void set_get_material_2_1(void) { 00074 //fprintf(stderr, "set_get_material_2_2\n"); 00075 double d = 1.3; 00076 int err; 00077 set_material_param(mdb, "material_2", "param_1", d, &err); 00078 CU_ASSERT(err == 0); 00079 double e = get_material_param(mdb, "material_2", "param_1", &err); 00080 CU_ASSERT(d == e); 00081 CU_ASSERT(err == 0); 00082 } 00083 /*Test to set and then get material 2 parameter 2*/ 00084 void set_get_material_2_2(void) { 00085 //fprintf(stderr, "set_get_material_2_2\n"); 00086 double d = 0.17; 00087 int err; 00088 set_material_param(mdb, "material_2", "param_2", d, &err); 00089 CU_ASSERT(err == 0); 00090 double e = get_material_param(mdb, "material_2", "param_2", &err); 00091 CU_ASSERT(d == e); 00092 CU_ASSERT(err == 0); 00093 } 00094 00095 /*Test to set and then get alloy of 1 and 2, with bowing 00096 *Also checks the other way (alloy of 2 and 1 with same param) 00097 */ 00098 void set_get_alloy_1_2_1_b(void) { 00099 //fprintf(stderr, "set_get_alloy_1_2_1_b: "); 00100 double b = 7; 00101 /*25% mat1 and 75% mat2*/ 00102 double x=0.25; 00103 int err; 00104 set_bowing_param(mdb, "material_1", "material_2", "param_1", b, &err); 00105 //fprintf(stderr, "b=%g x=%g err=%d ", b, x, err); 00106 CU_ASSERT(err == 0); 00107 double d1 = get_material_param(mdb, "material_1", "param_1", &err); 00108 CU_ASSERT(err == 0); 00109 double d2 = get_material_param(mdb, "material_2", "param_1", &err); 00110 CU_ASSERT(err == 0); 00111 double v12 = get_alloy_param(mdb, "material_1", "material_2", x, "param_1", &err); 00112 CU_ASSERT(err == 0); 00113 double v21 = get_alloy_param(mdb, "material_2", "material_1", (1.0-x), "param_1", &err); 00114 CU_ASSERT(err == 0); 00115 CU_ASSERT(fabs(v12 - v21) <= fabs(CLOSE_ENOUGH*(v12))); 00116 double v_12 = alloy_bowed(d1, d2, b, x); 00117 double v_21 = alloy_bowed(d2, d1, b, (1-x)); 00118 CU_ASSERT(fabs(v_12 - v_21) <= fabs(CLOSE_ENOUGH*(v_12))); 00119 CU_ASSERT(fabs(v_12 - v21) <= fabs(CLOSE_ENOUGH*(v_12))); 00120 CU_ASSERT(fabs(v12 - v_21) <= fabs(CLOSE_ENOUGH*(v_12))); 00121 CU_ASSERT(fabs(v21 - v_12) <= fabs(CLOSE_ENOUGH*(v_12))); 00122 CU_ASSERT(fabs(v_21 - v12) <= fabs(CLOSE_ENOUGH*(v_12))); 00123 //fprintf(stderr, "v12=%g v21=%g v_12=%g v_21=%g\n", v12, v21, v_12, v_21); 00124 } 00125 00126 /*Test to set and then get alloy of 1 and 2, with bowing 00127 *Also checks the other way (alloy of 2 and 1 with same param) 00128 */ 00129 void set_get_alloy_1_2_2_l(void) { 00130 //fprintf(stderr, "set_get_alloy_1_2_2_b\n"); 00131 /*25% mat1 and 75% mat2*/ 00132 double x=0.25; 00133 int err; 00134 double d1 = get_material_param(mdb, "material_1", "param_2", &err); 00135 CU_ASSERT(err == 0); 00136 double d2 = get_material_param(mdb, "material_2", "param_2", &err); 00137 CU_ASSERT(err == 0); 00138 double v12 = get_alloy_param(mdb, "material_1", "material_2", x, "param_2", &err); 00139 CU_ASSERT(err == 0); 00140 double v21 = get_alloy_param(mdb, "material_2", "material_1", (1.0-x), "param_2", &err); 00141 CU_ASSERT(err == 0); 00142 CU_ASSERT(fabs(v12 - v21) <= fabs(CLOSE_ENOUGH*(v12))); 00143 double v_12 = alloy_linear(d1, d2, x); 00144 double v_21 = alloy_linear(d2, d1, (1-x)); 00145 CU_ASSERT(fabs(v_12 - v_21) <= fabs(CLOSE_ENOUGH*(v_12))); 00146 CU_ASSERT(fabs(v_12 - v21) <= fabs(CLOSE_ENOUGH*(v_12))); 00147 CU_ASSERT(fabs(v12 - v_21) <= fabs(CLOSE_ENOUGH*(v_12))); 00148 CU_ASSERT(fabs(v21 - v_12) <= fabs(CLOSE_ENOUGH*(v_12))); 00149 CU_ASSERT(fabs(v_21 - v12) <= fabs(CLOSE_ENOUGH*(v_12))); 00150 } 00151 00152 /*Like the above, but shouldn't be called until after 1 is set for 00153 both params 1 and 2, but 2 only has param1..*/ 00154 void get_alloy_early_1_n2_1_b(void) { 00155 //fprintf(stderr, "get_alloy_early_1_n2_1_b: "); 00156 double b = 7; 00157 /*25% mat1 and 75% mat2*/ 00158 double x=0.25; 00159 int err; 00160 /*Should fail at setting the bowing; 4 ways of failing*/ 00161 set_bowing_param(mdb, "material_1", "material_2", "param_2", b, &err); 00162 //fprintf(stderr, "err=%d ", err); 00163 CU_ASSERT(err == 4); 00164 set_bowing_param(mdb, "material_2", "material_1", "param_2", b, &err); 00165 //fprintf(stderr, "err=%d ", err); 00166 CU_ASSERT(err == 2); 00167 set_bowing_param(mdb, "material_1", "material_172", "param_2", b, &err); 00168 //fprintf(stderr, "err=%d ", err); 00169 CU_ASSERT(err == 3); 00170 set_bowing_param(mdb, "material_172", "material_1", "param_2", b, &err); 00171 //fprintf(stderr, "err=%d ", err); 00172 CU_ASSERT(err == 1); 00173 00174 /*Should get material1, but not material2.*/ 00175 get_material_param(mdb, "material_1", "param_2", &err); 00176 //fprintf(stderr, "err=%d ", err); 00177 CU_ASSERT(err == 0); 00178 get_material_param(mdb, "material_2", "param_2", &err); 00179 //fprintf(stderr, "err=%d ", err); 00180 CU_ASSERT(err == 2); 00181 /*Should fail to get "material_172", since it has no entry whatsoever*/ 00182 get_material_param(mdb, "material_172", "param_2", &err); 00183 //fprintf(stderr, "err=%d ", err); 00184 CU_ASSERT(err == 1); 00185 00186 /*Should fail to get the bowing; 4 ways of failing.*/ 00187 get_alloy_param(mdb, "material_1", "material_2", x, "param_2", &err); 00188 //fprintf(stderr, "err=%d ", err); 00189 CU_ASSERT(err == 5); 00190 get_alloy_param(mdb, "material_2", "material_1", x, "param_2", &err); 00191 //fprintf(stderr, "err=%d ", err); 00192 CU_ASSERT(err == 3); 00193 get_alloy_param(mdb, "material_1", "material_172", x, "param_2", &err); 00194 //fprintf(stderr, "err=%d ", err); 00195 CU_ASSERT(err == 4); 00196 get_alloy_param(mdb, "material_172", "material_1", x, "param_2", &err); 00197 //fprintf(stderr, "err=%d ", err); 00198 CU_ASSERT(err == 2); 00199 //fprintf(stderr, "\n"); 00200 } 00201 00202 /*Like the above, but shouldn't be called until after 1 is set, but 00203 not 2.*/ 00204 void get_alloy_early_1_n2_2_l(void) { 00205 ////fprintf(stderr, "get_alloy_early_1_n2_2_l\n"); 00206 double b = 7; 00207 /*25% mat1 and 75% mat2*/ 00208 double x=0.25; 00209 int err; 00210 /*Should get material1, but not material2.*/ 00211 get_material_param(mdb, "material_1", "param_2", &err); 00212 CU_ASSERT(err == 0); 00213 get_material_param(mdb, "material_2", "param_2", &err); 00214 CU_ASSERT(err == 2); 00215 /*Should fail to get "material_172", since it has no entry whatsoever*/ 00216 get_material_param(mdb, "material_172", "param_2", &err); 00217 CU_ASSERT(err == 1); 00218 00219 /*Should fail to get the bowing; 4 ways of failing.*/ 00220 get_alloy_param(mdb, "material_1", "material_2", x, "param_2", &err); 00221 CU_ASSERT(err == 5); 00222 get_alloy_param(mdb, "material_2", "material_1", x, "param_2", &err); 00223 CU_ASSERT(err == 3); 00224 get_alloy_param(mdb, "material_1", "material_172", x, "param_2", &err); 00225 CU_ASSERT(err == 4); 00226 get_alloy_param(mdb, "material_172", "material_1", x, "param_2", &err); 00227 CU_ASSERT(err == 2); 00228 } 00229 00230 00231 void matdb_suite_add_tests(CU_pSuite suite) { 00232 CU_add_test(suite, "create", create_matdb); 00233 CU_add_test(suite, "set_get_material_1_1", set_get_material_1_1); 00234 CU_add_test(suite, "set_get_material_1_2", set_get_material_1_2); 00235 CU_add_test(suite, "set_get_material_2_1", set_get_material_2_1); 00236 CU_add_test(suite, "get_alloy_early_1_n2_1_b", get_alloy_early_1_n2_1_b); 00237 CU_add_test(suite, "get_alloy_early_1_n2_2_l", get_alloy_early_1_n2_2_l); 00238 CU_add_test(suite, "set_get_material_2_2", set_get_material_2_2); 00239 CU_add_test(suite, "set_get_alloy_1_2_1_b", set_get_alloy_1_2_1_b); 00240 CU_add_test(suite, "set_get_alloy_1_2_2_l", set_get_alloy_1_2_2_l); 00241 CU_add_test(suite, "destroy", destroy_matdb); 00242 }