source: trunk/test/lookup_test.cc @ 536

Last change on this file since 536 was 536, checked in by Peter, 16 years ago

fixed problem with ConsensusInputranker? - Now all tests do pass

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 7.6 KB
Line 
1// $Id: lookup_test.cc 536 2006-03-03 21:19:29Z peter $
2
3#include <c++_tools/gslapi/matrix.h>
4#include <c++_tools/classifier/DataLookup1D.h>
5#include <c++_tools/classifier/KernelLookup.h>
6#include <c++_tools/classifier/Kernel_SEV.h>
7#include <c++_tools/classifier/MatrixLookup.h>
8#include <c++_tools/classifier/PolynomialKernelFunction.h>
9
10
11#include <fstream>
12#include <iostream>
13#include <vector>
14
15using namespace theplu;
16
17gslapi::matrix matrix(size_t n);
18
19bool test_data_lookup1D(std::ostream* error);
20bool test_kernel_lookup(std::ostream* error);
21bool test_matrix_lookup(std::ostream* error);
22
23int main(const int argc,const char* argv[])
24{
25  using namespace theplu::classifier;
26
27  std::ostream* error;
28  if (argc>1 && argv[1]==std::string("-v"))
29    error = &std::cerr;
30  else {
31    error = new std::ofstream("/dev/null");
32    if (argc>1)
33      std::cout << "lookup_test -v : for printing extra information\n";
34  }
35
36  *error << "Testing Lookup Classes" << std::endl;
37  bool ok = test_data_lookup1D(error);
38
39  ok = ok && test_matrix_lookup(error);
40 
41  ok = ok && test_kernel_lookup(error);
42
43  if (ok)
44    *error << "Ok." << std::endl;
45
46  if (error!=&std::cerr)
47    delete error;
48
49  return (ok ? 0 : -1);
50}
51
52gslapi::matrix matrix(size_t n)
53{
54  gslapi::matrix res(n,n);
55  for (size_t i=0;i<n;i++)
56    for (size_t j=0;j<n;j++)
57      res(i,j)=10*i+j;
58  return res;
59}
60
61bool test_data_lookup1D(std::ostream* error)
62{
63  bool ok =true;
64  *error << "Testing DataLookup1D" << std::endl;
65  gslapi::matrix gsl_m1(matrix(5));
66  std::vector<size_t> index_odd;
67  index_odd.push_back(1);
68  index_odd.push_back(3);
69  std::vector<size_t> index_even;
70  index_even.push_back(2);
71  index_even.push_back(0);
72  index_even.push_back(4);
73  classifier::MatrixLookup m1(gsl_m1,index_odd,index_even);
74  *error << "DataLookup1D::DataLookup1D(const MatrixLookup&\n"
75         << "                           const size_t, const bool)...";
76  classifier::DataLookup1D v1(m1,1);
77  if (v1.size()!=m1.columns() || v1(0)!=m1(1,0) || 
78      v1(1)!=m1(1,1) ) {
79    ok =false;
80    *error << "\nERROR" << std::endl;
81    *error << "size: " << v1.size() << " expected " << m1.columns() << "\n" 
82           << "v1(0): " << v1(0) << " expected " << m1(1,0) << "\n"
83           << "v1(1): " << v1(1) << " expected " << m1(1,1) 
84           << std::endl;
85  }
86  else
87    *error << "Ok" << std::endl;
88
89  *error << "DataLookup1D::DataLookup1D(const MatrixLookup&\n"
90         << "                           const size_t, const bool)...";
91  classifier::DataLookup1D v2(m1,1,false);
92  if (v2.size()!=m1.rows() || v2(0)!=m1(0,1) || v2(1)!=m1(1,1) ) {
93    ok =false;
94    *error << "\nERROR\n"
95           << "size: " << v2.size() << " expected " << m1.rows() << "\n" 
96           << "v2(0): " << v2(0) << " expected " << m1(0,1) << "\n"
97           << "v2(1): " << v2(1) << " expected " << m1(1,1) 
98           << std::endl;
99  }
100  else
101    *error << "Ok" << std::endl;
102
103  return ok;
104}
105
106bool test_kernel_lookup(std::ostream* error)
107{
108  bool ok =true;
109  *error << "\nTesting KernelLookup" << std::endl;
110  gslapi::matrix data_core(1,5);
111  for (size_t i=0; i<data_core.columns(); i++)
112    data_core(0,i)=i;
113  classifier::MatrixLookup data(data_core);
114  classifier::PolynomialKernelFunction kf;
115  classifier::Kernel_SEV kernel(data,kf);
116  *error << "KernelLookup::KernelLookup(const Kernel&)...";
117  classifier::KernelLookup k1(kernel);
118  if (k1.rows()!=kernel.rows() || k1.columns()!=kernel.columns()) {
119    ok =false;
120    *error <<   "ERROR:" << std::endl;
121    *error << "Dimensions do not agree." << std::endl;
122  }
123  for (size_t i=0; i<k1.rows(); i++) 
124    for (size_t j=0; j<k1.columns(); j++) 
125      if (k1(i,j)!=kernel(i,j)) {
126        ok =false;
127        *error << "ERROR:\n"
128               << "KernelLookup::KernelLookup(const Kernel& data)"
129               << std::endl;
130        *error << "k(" << i << "," << j << ") is " << k1(i,j) 
131               << "expected " << kernel(i,j) << std::endl;
132      }
133 
134  std::vector<size_t> index_odd;
135  index_odd.push_back(1);
136  index_odd.push_back(3);
137  std::vector<size_t> index_even;
138  index_even.push_back(2);
139  index_even.push_back(0);
140  index_even.push_back(5);
141 
142
143
144  return ok;
145}
146
147bool test_matrix_lookup(std::ostream* error)
148{
149  bool ok =true;
150  *error << "\nTesting MatrixLookup" << std::endl;
151  *error << "MatrixLookup::MatrixLookup(const gslapi::matrix& data)...";
152  gslapi::matrix gsl_m1(matrix(2));
153  classifier::MatrixLookup m1(gsl_m1);
154  if (m1.rows()!=gsl_m1.rows() || m1.columns()!=gsl_m1.columns() || 
155      m1(0,0)!=gsl_m1(0,0) || m1(0,1)!=gsl_m1(0,1) || 
156      m1(1,0)!=gsl_m1(1,0) || m1(1,1)!=gsl_m1(1,1) ) {
157    ok =false;
158    *error <<   "ERROR:" << std::endl;
159  }
160  else 
161    *error << "Ok" << std::endl;
162
163 
164  *error << "MatrixLookup::MatrixLookup(const gslapi::matrix&,\n" 
165         << "                           const std::vector<size_t>&,\n"
166         << "                           const std::vector<size_t>&)...";
167  gslapi::matrix gsl_m2(matrix(4));
168  std::vector<size_t> index_odd;
169  index_odd.push_back(1);
170  index_odd.push_back(3);
171  std::vector<size_t> index_even;
172  index_even.push_back(2);
173  index_even.push_back(0);
174 
175  classifier::MatrixLookup m2(gsl_m2,index_odd, index_even);
176  if (m2.rows()!=2 || m2.columns()!=2 || 
177      m2(0,0)!=gsl_m2(1,2) || m2(0,1)!=gsl_m2(1,0) || 
178      m2(1,0)!=gsl_m2(3,2) || m2(1,1)!=gsl_m2(3,0) ) {
179    ok =false;
180    *error <<   "ERROR:" << std::endl;
181  }
182  else
183    *error << "Ok" << std::endl;
184
185  *error << "MatrixLookup::MatrixLookup(const gslapi::matrix&,\n" 
186         << "                           const std::vector<size_t>&,\n"
187         << "                           const bool)...";
188  std::vector<size_t> one(1,1);
189  classifier::MatrixLookup m3(gsl_m2,one,true);
190  if (m3.rows()!=1 || m3.columns()!=gsl_m2.columns() || m3(0,0)!=gsl_m2(1,0) || 
191      m3(0,1)!=gsl_m2(1,1) || m3(0,2)!=gsl_m2(1,2) || m3(0,3)!=gsl_m2(1,3)) {
192    ok =false;
193    *error <<   "ERROR:" << std::endl;
194    *error << "m3.rows(): " << m3.rows() << " expected 1" << std::endl; 
195    *error << "m3.columns(): " << m3.columns() << " expected " 
196           << gsl_m2.columns() << std::endl; 
197  }
198  else
199    *error << "Ok" << std::endl;
200
201  *error << "MatrixLookup::MatrixLookup(const MatrixLookup&)...";
202  classifier::MatrixLookup m4(m2);
203  if (m4.rows()!=m2.rows() || m4.columns()!=m2.rows() || m4(0,0)!=m2(0,0) || 
204      m4(0,1)!=m2(0,1) || m4(1,0)!=m2(1,0) || m4(1,1)!=m2(1,1) ) {
205    ok =false;
206    *error <<   "ERROR:" << std::endl;
207  }
208  else
209    *error << "Ok" << std::endl;
210
211  *error << "MatrixLookup::MatrixLookup(const MatrixLookup& data\n" 
212         << "                           const std::vector<size_t>&,\n"
213         << "                           const std::vector<size_t>&)...";
214  classifier::MatrixLookup m5(m2,one,one);
215  if (m5.rows()!=1 || m5.columns()!=1 || m5(0,0)!=m2(1,1) ) {
216    ok =false;
217    *error <<   "ERROR:" << std::endl;
218    *error << "MatrixLookup is " << m5(0,0) << " expected " << m2(1,1)
219           << std::endl;
220  }
221  else
222    *error << "Ok" << std::endl;
223 
224  *error << "MatrixLookup::MatrixLookup(const MatrixLookup&,\n" 
225         << "                           const std::vector<size_t>&,\n"
226         << "                           const bool)...";
227  classifier::MatrixLookup m6(m2,one,true);
228  if (m6.rows()!=1 || m6.columns()!=m2.columns() || m6(0,0)!=m2(1,0) || 
229      m6(0,1)!=m2(1,1)) {
230    ok =false;
231    *error << "ERROR:" << std::endl;
232  }
233  else
234    *error << "Ok" << std::endl;
235
236
237  *error << "MatrixLookup::training_data(const std::vector<size_t>)...";
238  const classifier::MatrixLookup* TrnData = m2.training_data(one);
239  if (TrnData->rows() != m2.rows() || TrnData->columns()!=one.size()){
240    ok =false;
241    *error << "ERROR:" << std::endl;
242  }
243  else
244    *error << "Ok" << std::endl;
245  delete TrnData;
246
247  *error << "MatrixLookup::validation_data(const std::vector<size_t>,\n"
248         << "                              const std::vector<size_t>)...";
249  std::vector<size_t> val(23,2);
250  const classifier::MatrixLookup* ValData = m2.validation_data(one, val);
251  if (ValData->rows() != m2.rows() || TrnData->columns()!=val.size()){
252    ok =false;
253    *error << "ERROR:" << std::endl;
254  }
255  else
256    *error << "Ok" << std::endl;
257  delete ValData;
258
259
260  return ok;
261}
Note: See TracBrowser for help on using the repository browser.