gimme-alpha 0.1

matdb-suite.c

Go to the documentation of this file.
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 }
 All Classes Files Functions Variables Enumerations Enumerator Defines