openModeller  Version 1.5.0
test_rules_evaluate.cpp
Go to the documentation of this file.
1 
31 #include <TestHarness.h>
33 #include <openmodeller/Sample.hh>
34 
35 #include <rules_range.hh>
36 #include <rules_negrange.hh>
37 #include <rules_logit.hh>
38 #include <test_rules_defs.hh>
40 
44 
45 
46 #define eps 10e-6
47 
48 OccurrencesPtr getSampleSet(int hardcodedSamplesIndex, int *dim)
49 {
50  HardcodedSample * data = SamplesSet + hardcodedSamplesIndex;
51  OccurrencesPtr occs ( new OccurrencesImpl("") );
52 
53  *dim = data->dimension;
54 
55  int valDim = data->dimension + 1;
56 
57  for (int i = 0; i < data->resamples; ++i)
58  {
59  Scalar pred = *(data->values + (valDim * i));
60  Sample s(data->dimension, data->values + (valDim * i) + 1);
61  OccurrencePtr oc( new OccurrenceImpl(0.0, 0.0, -1.0, pred) );
62  oc->setUnnormalizedEnvironment(s);
63  occs->insert(oc);
64  }
65 
66  return occs;
67 }
68 
69 
70 
71 // helper function
72 bool checkEqualArray(Scalar * array1, Scalar * array2, int size, double veps)
73 {
74  int i;
75  bool result = true;
76 
77  if (!array1 || !array2)
78  return false;
79 
80  for (i = 0; i < size; i++)
81  {
82  //printf("Comparing (%2d): %+12.8f == %+12.8f => ", i, array1[i], array2[i]);
83  if ((array1[i] != -1000) && (array2[i] != -1000))
84  { result = result && (fabs(array1[i] - array2[i]) <= veps); }
85 
86  //printf("%d\n", result);
87  }
88 
89  //printf("\n");
90 
91  return result;
92 }
93 
94 template <class T>
95 bool testEvaluate(int sampleIndex, Scalar * ruleGenes,
96  Scalar rulePred, Scalar * rulePerfs)
97 {
98  int i, dim;
99  double * perf;
100  bool result;
101 
102  T * rule = new T();
103  OccurrencesPtr occs = getSampleSet(sampleIndex, &dim);
104  rule->setPrediction(rulePred);
105  rule->setGenes(ruleGenes, dim);
106  rule->evaluate(occs);
107  perf = rule->getPerformanceArray();
108 
109  /*
110  OccurrencesImpl::const_iterator it = occs->begin();
111  OccurrencesImpl::const_iterator end = occs->end();
112 
113  int k = 0;
114  while (it != end)
115  {
116  Scalar y = (*it)->abundance();
117  Sample s = (*it)->environment();
118 
119  printf("occs[%2d]: (occ=%-7.3f) ", k, y);
120  for (int i = 0; i < dim; ++i)
121  printf("%-7.3f | ", s[i]);
122  printf("\n");
123 
124  ++it; ++k;
125  }
126 
127  printf("Rule (pred=%7.3f): ", rule->getPrediction());
128  for (int i = 0; i < dim; ++i)
129  printf("%-7.3f %-7.3f | ", rule->getChrom1()[i], rule->getChrom2()[i]);
130  printf("\n");
131  */
132 
133  result = checkEqualArray(perf, rulePerfs, 10, eps);
134  delete rule;
135  return result;
136 }
137 
138 
139 // SampleSet 1
140 // ===========
141 TEST( evaluate1_1, RangeRule )
142 { CHECK(testEvaluate<ExtRangeRule>(1, RuleGenes1_1, RulePred1_1, RulePerfs1_1)); }
143 
144 TEST( evaluate1_2, RangeRule )
145 { CHECK(testEvaluate<ExtRangeRule>(1, RuleGenes1_2, RulePred1_2, RulePerfs1_2)); }
146 
147 TEST( evaluate1_3, NegatedRangeRule )
148 { CHECK(testEvaluate<ExtNegatedRangeRule>(1, RuleGenes1_3, RulePred1_3, RulePerfs1_3)); }
149 
150 TEST( evaluate1_4, NegatedRangeRule )
151 { CHECK(testEvaluate<ExtNegatedRangeRule>(1, RuleGenes1_4, RulePred1_4, RulePerfs1_4)); }
152 
153 
154 // SampleSet 2
155 // ===========
156 TEST( evaluate2_1, RangeRule )
157 { CHECK(testEvaluate<ExtRangeRule>(2, RuleGenes2_1, RulePred2_1, RulePerfs2_1)); }
158 
159 TEST( evaluate2_2, RangeRule )
160 { CHECK(testEvaluate<ExtRangeRule>(2, RuleGenes2_2, RulePred2_2, RulePerfs2_2)); }
161 
162 TEST( evaluate2_3, RangeRule )
163 { CHECK(testEvaluate<ExtRangeRule>(2, RuleGenes2_3, RulePred2_3, RulePerfs2_3)); }
164 
165 TEST( evaluate2_4, RangeRule )
166 { CHECK(testEvaluate<ExtRangeRule>(2, RuleGenes2_4, RulePred2_4, RulePerfs2_4)); }
167 
168 
169 // SampleSet 3
170 // ===========
171 TEST( evaluate3_1, RangeRule )
172 { CHECK(testEvaluate<ExtRangeRule>(3, RuleGenes3_1, RulePred3_1, RulePerfs3_1)); }
173 
174 TEST( evaluate3_2, RangeRule )
175 { CHECK(testEvaluate<ExtRangeRule>(3, RuleGenes3_2, RulePred3_2, RulePerfs3_2)); }
176 
177 
178 // SampleSet 4
179 // ===========
180 TEST( evaluate4_1, RangeRule )
181 { CHECK(testEvaluate<ExtRangeRule>(4, RuleGenes4_1, RulePred4_1, RulePerfs4_1)); }
182 
183 TEST( evaluate4_2, RangeRule )
184 { CHECK(testEvaluate<ExtRangeRule>(4, RuleGenes4_2, RulePred4_2, RulePerfs4_2)); }
185 
186 TEST( evaluate4_3, RangeRule )
187 { CHECK(testEvaluate<ExtRangeRule>(4, RuleGenes4_3, RulePred4_3, RulePerfs4_3)); }
188 
189 TEST( evaluate4_4, NegatedRangeRule )
190 { CHECK(testEvaluate<ExtNegatedRangeRule>(4, RuleGenes4_4, RulePred4_4, RulePerfs4_4)); }
191 
192 TEST( evaluate4_5, NegatedRangeRule )
193 { CHECK(testEvaluate<ExtNegatedRangeRule>(4, RuleGenes4_5, RulePred4_5, RulePerfs4_5)); }
194 
195 TEST( evaluate4_6, NegatedRangeRule )
196 { CHECK(testEvaluate<ExtNegatedRangeRule>(4, RuleGenes4_6, RulePred4_6, RulePerfs4_6)); }
197 
198 
199 
200 // Logit regression tests
201 TEST( regression4_1, LogitRule )
202 {
203  int dim;
204  Regression reg;
205 
206  OccurrencesPtr occs = getSampleSet(4, &dim);
207  reg.calculateParameters(occs);
208 
209  DOUBLES_EQUAL(reg.getA()[0], +0.336735, eps);
210  DOUBLES_EQUAL(reg.getB()[0], -0.459183, eps);
211  DOUBLES_EQUAL(reg.getC()[0], -0.445368, eps);
212 
213  DOUBLES_EQUAL(reg.getA()[1], +0.378012, eps);
214  DOUBLES_EQUAL(reg.getB()[1], -0.353916, eps);
215  DOUBLES_EQUAL(reg.getC()[1], -0.596326, eps);
216 }
Scalar RuleGenes4_6[4]
Scalar RuleGenes1_1[4]
const Sample getA() const
Definition: regression.hh:48
Scalar RuleGenes3_1[4]
Scalar RulePerfs1_1[10]
Scalar RulePred1_2
Scalar RuleGenes4_3[4]
Scalar RuleGenes1_2[4]
Scalar RulePred3_1
Scalar RulePerfs2_4[10]
Scalar RulePred3_2
double Scalar
Type of map values.
Definition: om_defs.hh:39
Scalar RulePerfs4_5[10]
Scalar RulePred2_1
Scalar RulePerfs1_3[10]
OccurrencesPtr getSampleSet(int hardcodedSamplesIndex, int *dim)
Scalar RuleGenes4_2[4]
const Sample getB() const
Definition: regression.hh:49
Scalar RulePred4_3
struct HardcodedSample SamplesSet[NUM_SAMPLE_SETS]
Scalar RulePred1_1
Scalar RulePred4_6
Scalar RuleGenes1_3[4]
Scalar RulePerfs2_3[10]
Scalar RulePred4_4
Scalar RulePerfs4_3[10]
Scalar RuleGenes2_2[4]
Scalar RulePred4_1
Scalar RuleGenes4_4[4]
Scalar RulePred4_2
ExtendedDummyRule< RangeRule > ExtRangeRule
bool testEvaluate(int sampleIndex, Scalar *ruleGenes, Scalar rulePred, Scalar *rulePerfs)
Scalar RuleGenes1_4[4]
bool checkEqualArray(Scalar *array1, Scalar *array2, int size, double veps)
Scalar RulePred4_5
ExtendedDummyRule< NegatedRangeRule > ExtNegatedRangeRule
Scalar RuleGenes2_4[4]
Scalar RuleGenes4_5[4]
void calculateParameters(const OccurrencesPtr &occs)
Definition: regression.cpp:50
const Sample getC() const
Definition: regression.hh:50
Scalar RulePred2_2
Scalar RulePerfs2_1[10]
Scalar RulePerfs2_2[10]
TEST(evaluate1_1, RangeRule)
Scalar RuleGenes3_2[4]
Scalar RulePerfs4_1[10]
Scalar RulePred2_4
Scalar RulePerfs3_1[10]
Scalar RuleGenes4_1[4]
ExtendedDummyRule< LogitRule > ExtLogitRule
Scalar RuleGenes2_3[4]
Scalar RulePerfs3_2[10]
Scalar RulePerfs1_2[10]
Scalar RulePred2_3
Scalar RulePred1_4
Scalar RulePerfs4_2[10]
Scalar RulePerfs1_4[10]
Scalar RuleGenes2_1[4]
Scalar RulePerfs4_4[10]
#define eps
Scalar RulePerfs4_6[10]
Scalar RulePred1_3
Definition: Sample.hh:25