openModeller
Version 1.4.0
|
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