openModeller  Version 1.4.0
test_rules_base.cpp
Go to the documentation of this file.
00001 
00031 #include <TestHarness.h>
00032 #include <openmodeller/Sample.hh>
00033 #include <rules_base.hh>
00034 
00035 class ExtGarpRule : public GarpRule
00036 {
00037 public:
00038   ExtGarpRule(int numGenes = 0) : GarpRule(numGenes) {};
00039 
00040   ExtGarpRule(Scalar pred, int numGenes, 
00041         Sample& ch1, Sample& ch2, double * perf) :
00042     GarpRule(pred, numGenes, ch1, ch2, perf) {};
00043 
00044   GarpRule * objFactory() const { return new ExtGarpRule(); } 
00045   int getStrength(const Sample&) const {}
00046   bool applies (const Sample&) const {}
00047 
00048   void setPrediction(Scalar newPrediction) { _prediction = newPrediction; }
00049   void setGenes(Scalar * genes, int numGenes);
00050 };
00051 
00052 
00053 void ExtGarpRule::setGenes(Scalar * genes, int numGenes)
00054 {
00055   int i;
00056 
00057   _numGenes = numGenes;
00058 
00059   if (genes)
00060     {
00061       Scalar values1[_numGenes];
00062       Scalar values2[_numGenes];
00063       
00064       for (i = 0; i < _numGenes; i++)
00065   {
00066     values1[i] = genes[i * 2];
00067     values2[i] = genes[i * 2 + 1];
00068   }
00069 
00070       _chrom1 = Sample(_numGenes, values1);
00071       _chrom2 = Sample(_numGenes, values2);
00072     }
00073 }
00074 
00075 
00076 #define eps 10e-6
00077 
00078 TEST( initialize, GarpRule )
00079 {
00080   int i, n = 5;
00081 
00082   ExtGarpRule * rule = new ExtGarpRule(n);
00083 
00084   Sample chrom1 = rule->getChrom1();
00085   Sample chrom2 = rule->getChrom2();
00086 
00087   for (i = 0; i < n; ++i)
00088     { 
00089       DOUBLES_EQUAL((double) chrom1[i], -1.0, eps);
00090       DOUBLES_EQUAL((double) chrom2[i], +1.0, eps);
00091     }
00092 
00093   delete rule;
00094 }
00095 
00096 
00097 // helper function
00098 bool checkEqualArray(Scalar * array1, Scalar * array2, int size, double veps)
00099 {
00100   int i;
00101 
00102   if (!array1 || !array2)
00103     return false;
00104 
00105   for (i = 0; i < size; i++)
00106     if (fabs(array1[i] - array2[i]) > veps)
00107       { return false; }
00108 
00109   return true;
00110 }
00111 
00112 
00113 TEST( copy , GarpRule )
00114 {
00115   double perfs[10];
00116   Sample c1(4, -0.5);
00117   Sample c2(4, +0.5);
00118   Sample blank(4);
00119 
00120   ExtGarpRule * src = new ExtGarpRule(1.0, 4, c1, c2, perfs);
00121   ExtGarpRule * dst = new ExtGarpRule(1.0, 4, blank, blank, perfs);
00122   
00123   LONGS_EQUAL(1, dst->copy(src));
00124 
00125   for (int i = 0; i < 4; ++i)
00126     {
00127       DOUBLES_EQUAL(-0.5, dst->getChrom1()[i], eps);
00128       DOUBLES_EQUAL(+0.5, dst->getChrom2()[i], eps);
00129     }
00130   
00131   delete src;
00132   delete dst;
00133 }
00134 
00135 
00136 TEST( clone , GarpRule )
00137 {
00138   double perfs[10];
00139   Sample c1(4, -0.5);
00140   Sample c2(4, +0.5);
00141 
00142   ExtGarpRule * src = new ExtGarpRule(1.0, 4, c1, c2, perfs);
00143   ExtGarpRule * dst = (ExtGarpRule *) src->clone();
00144   
00145   for (int i = 0; i < 4; ++i)
00146     {
00147       DOUBLES_EQUAL(-0.5, dst->getChrom1()[i], eps);
00148       DOUBLES_EQUAL(+0.5, dst->getChrom2()[i], eps);
00149     }
00150   
00151   delete src;
00152   delete dst;
00153 }
00154 
00155 
00156 TEST( getCertainty1 , GarpRule )
00157 {
00158   ExtGarpRule * rule = new ExtGarpRule;
00159   
00160   rule->setPrediction(0.0);
00161 
00162   DOUBLES_EQUAL(rule->getCertainty(0.0), 1.0, eps);
00163   DOUBLES_EQUAL(rule->getCertainty(1.0), 0.0, eps);
00164   DOUBLES_EQUAL(rule->getCertainty(0.5), 0.0, eps);
00165 
00166   delete rule;
00167 }
00168 
00169 
00170 TEST( getCertainty2 , GarpRule )
00171 {
00172   ExtGarpRule * rule = new ExtGarpRule;
00173   
00174   rule->setPrediction(1.0);
00175 
00176   DOUBLES_EQUAL(rule->getCertainty(0.0), 0.0, eps);
00177   DOUBLES_EQUAL(rule->getCertainty(1.0), 1.0, eps);
00178   DOUBLES_EQUAL(rule->getCertainty(0.5), 0.0, eps);
00179 
00180   delete rule;
00181 }
00182 
00183 
00184 TEST( getError , GarpRule )
00185 {
00186   ExtGarpRule * rule = new ExtGarpRule;
00187   
00188   DOUBLES_EQUAL(rule->getError(0.0, 0.0), 0.0, eps);
00189   DOUBLES_EQUAL(rule->getError(1.0, 0.0), 1.0, eps);
00190   DOUBLES_EQUAL(rule->getError(1.0, -1.0), 2.0, eps);
00191   DOUBLES_EQUAL(rule->getError(-1.0, 1.0), 2.0, eps);
00192   DOUBLES_EQUAL(rule->getError(0.0, 0.5), 0.5, eps);
00193 
00194   delete rule;
00195 }
00196 
00197 
00198 
00199 Scalar genes1[8] = {-0.8, +0.8, -0.8, +0.8, -0.8, +0.8, -0.8, +0.8};
00200 Scalar genes2[8] = {-0.8, +0.8, -0.8, +0.8, -0.8, +0.8, -0.8, +0.8};
00201 
00202 TEST( Similar1, GarpRule )
00203 {
00204   ExtGarpRule * rule1 = new ExtGarpRule;
00205   ExtGarpRule * rule2 = new ExtGarpRule;
00206   rule1->setGenes(genes1, 4);
00207   rule2->setGenes(genes2, 4);
00208   
00209   LONGS_EQUAL(rule1->similar(rule2), true);
00210   
00211   delete rule1; 
00212   delete rule2;
00213 }
00214 
00215 Scalar genes3[8] = {-0.2, +0.8, -0.8, +0.8, -0.8, +0.8, -0.8, +0.8};
00216 Scalar genes4[8] = {+0.7, +0.8, -0.8, +0.8, -0.8, +0.8, -0.8, +0.8};
00217 
00218 TEST( Similar2, GarpRule )
00219 {
00220   ExtGarpRule * rule1 = new ExtGarpRule;
00221   ExtGarpRule * rule2 = new ExtGarpRule;
00222   rule1->setGenes(genes3, 4);
00223   rule2->setGenes(genes4, 4);
00224   
00225   LONGS_EQUAL(rule1->similar(rule2), true);
00226   
00227   delete rule1; 
00228   delete rule2;
00229 }
00230 
00231 Scalar genes5[8] = {-0.8, +0.8, -1.0, +1.0, -0.8, +0.8, -0.8, +0.8};
00232 Scalar genes6[8] = {-0.8, +0.8, -0.8, +0.8, -0.8, +0.8, -0.8, +0.8};
00233 
00234 TEST( Similar3, GarpRule )
00235 {
00236   ExtGarpRule * rule1 = new ExtGarpRule;
00237   ExtGarpRule * rule2 = new ExtGarpRule;
00238   rule1->setGenes(genes5, 4);
00239   rule2->setGenes(genes6, 4);
00240   
00241   LONGS_EQUAL(rule1->similar(rule2), false);
00242   
00243   delete rule1; 
00244   delete rule2;
00245 }
00246 
00247 Scalar genes7[8] = {-0.8, +0.8, -1.0, +0.9, -0.8, +0.8, -0.8, +0.8};
00248 Scalar genes8[8] = {-0.8, +0.8, -0.8, +0.8, -0.8, +0.8, -0.8, +0.8};
00249 
00250 TEST( Similar4, GarpRule )
00251 {
00252   ExtGarpRule * rule1 = new ExtGarpRule;
00253   ExtGarpRule * rule2 = new ExtGarpRule;
00254   rule1->setGenes(genes7, 4);
00255   rule2->setGenes(genes8, 4);
00256   
00257   LONGS_EQUAL(rule1->similar(rule2), true);
00258   
00259   delete rule1; 
00260   delete rule2;
00261 }
00262