source: trunk/test/matrix_lookup_test.cc @ 1360

Last change on this file since 1360 was 1360, checked in by Peter, 13 years ago

working on ticket #214

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 6.2 KB
Line 
1// $Id: matrix_lookup_test.cc 1360 2008-06-26 01:17:58Z peter $
2
3/*
4  Copyright (C) 2006, 2007 Jari Häkkinen, Peter Johansson
5  Copyright (C) 2008 Peter Johansson
6
7  This file is part of the yat library, http://trac.thep.lu.se/yat
8
9  The yat library is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License as
11  published by the Free Software Foundation; either version 2 of the
12  License, or (at your option) any later version.
13
14  The yat library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with this program; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22  02111-1307, USA.
23*/
24
25#include "Suite.h"
26
27#include "yat/utility/Matrix.h"
28#include "yat/classifier/MatrixLookup.h"
29
30#include <fstream>
31#include <iostream>
32#include <vector>
33
34using namespace theplu::yat;
35
36utility::Matrix matrix(size_t n);
37
38int main(int argc, char* argv[])
39{
40  using namespace theplu::yat::classifier;
41
42  test::Suite suite(argc, argv);
43
44  suite.err() << "\nTesting MatrixLookup" << std::endl;
45  suite.err() << "MatrixLookup::MatrixLookup(const utility::Matrix& data)...";
46  utility::Matrix gsl_m1(matrix(2));
47  classifier::MatrixLookup m1(gsl_m1);
48  if (m1.rows()!=gsl_m1.rows() || m1.columns()!=gsl_m1.columns() || 
49      m1(0,0)!=gsl_m1(0,0) || m1(0,1)!=gsl_m1(0,1) || 
50      m1(1,0)!=gsl_m1(1,0) || m1(1,1)!=gsl_m1(1,1) ) {
51    suite.add(false);
52    suite.err() <<  "ERROR:" << std::endl;
53  }
54  else 
55    suite.err() << "Ok" << std::endl;
56
57  // FIXME - see ticket:389
58  //suite.add(suite.test_stream(m1));
59
60 
61  suite.err() << "MatrixLookup::MatrixLookup(const utility::Matrix&,\n" 
62         << "                           const std::vector<size_t>&,\n"
63         << "                           const std::vector<size_t>&)...";
64  utility::Matrix gsl_m2(matrix(4));
65  std::vector<size_t> index_odd;
66  index_odd.push_back(1);
67  index_odd.push_back(3);
68  std::vector<size_t> index_even;
69  index_even.push_back(2);
70  index_even.push_back(0);
71 
72  classifier::MatrixLookup m2(gsl_m2,utility::Index(index_odd), 
73                              utility::Index(index_even));
74  if (m2.rows()!=2 || m2.columns()!=2 || 
75      m2(0,0)!=gsl_m2(1,2) || m2(0,1)!=gsl_m2(1,0) || 
76      m2(1,0)!=gsl_m2(3,2) || m2(1,1)!=gsl_m2(3,0) ) {
77    suite.add(false);
78    suite.err() <<  "ERROR:" << std::endl;
79    suite.err() << "rows: " << m2.rows() << " expected 2\n"
80           << "columns: " << m2.columns() << " expected 2\n"
81           << "(0,0): " << m2(0,0) << " expected " << gsl_m2(1,2) << "\n"
82           << "(0,1): " << m2(1,0) << " expected " << gsl_m2(1,0) << "\n"
83           << "(1,0): " << m2(0,1) << " expected " << gsl_m2(3,2) << "\n"
84           << "(0,0): " << m2(0,0) << " expected " << gsl_m2(3,0) << "\n";
85  }
86  else
87    suite.err() << "Ok" << std::endl;
88
89  suite.err() << "MatrixLookup::MatrixLookup(const utility::Matrix&,\n" 
90         << "                           const std::vector<size_t>&,\n"
91         << "                           const bool)...";
92  std::vector<size_t> one(1,1);
93  classifier::MatrixLookup m3(gsl_m2,utility::Index(one),true);
94  if (m3.rows()!=1 || m3.columns()!=gsl_m2.columns() || m3(0,0)!=gsl_m2(1,0) || 
95      m3(0,1)!=gsl_m2(1,1) || m3(0,2)!=gsl_m2(1,2) || m3(0,3)!=gsl_m2(1,3)) {
96    suite.add(false);
97    suite.err() <<  "ERROR:" << std::endl;
98    suite.err() << "m3.rows(): " << m3.rows() << " expected 1" << std::endl; 
99    suite.err() << "m3.columns(): " << m3.columns() << " expected " 
100           << gsl_m2.columns() << std::endl; 
101  }
102  else
103    suite.err() << "Ok" << std::endl;
104
105  suite.err() << "MatrixLookup::MatrixLookup(const MatrixLookup&)...";
106  classifier::MatrixLookup m4(m2);
107  if (m4.rows()!=m2.rows() || m4.columns()!=m2.rows() || m4(0,0)!=m2(0,0) || 
108      m4(0,1)!=m2(0,1) || m4(1,0)!=m2(1,0) || m4(1,1)!=m2(1,1) ) {
109    suite.add(false);
110    suite.err() <<  "ERROR:" << std::endl;
111  }
112  else
113    suite.err() << "Ok" << std::endl;
114
115  suite.err() << "MatrixLookup::MatrixLookup(const MatrixLookup& data\n" 
116         << "                           const std::vector<size_t>&,\n"
117         << "                           const std::vector<size_t>&)...";
118  classifier::MatrixLookup m5(m2,utility::Index(one),utility::Index(one));
119  if (m5.rows()!=1 || m5.columns()!=1 || m5(0,0)!=m2(1,1) ) {
120    suite.add(false);
121    suite.err() <<  "ERROR:" << std::endl;
122    suite.err() << "MatrixLookup is " << m5(0,0) << " expected " << m2(1,1)
123           << std::endl;
124  }
125  else
126    suite.err() << "Ok" << std::endl;
127 
128  suite.err() << "MatrixLookup::MatrixLookup(const MatrixLookup&,\n" 
129         << "                           const std::vector<size_t>&,\n"
130         << "                           const bool)...";
131  classifier::MatrixLookup m6(m2,utility::Index(one),true);
132  if (m6.rows()!=1 || m6.columns()!=m2.columns() || m6(0,0)!=m2(1,0) || 
133      m6(0,1)!=m2(1,1)) {
134    suite.add(false);
135    suite.err() << "ERROR:" << std::endl;
136  }
137  else
138    suite.err() << "Ok" << std::endl;
139
140  suite.err() << "MatrixLookup::MatrixLookup(const size_t,const size_t,\n"
141         << "                           const double)...";
142  classifier::MatrixLookup m7(103,112,12);
143  if (m7.rows()!=103 || m7.columns()!=112 || m7(0,0)!=12) {
144    suite.add(false);
145    suite.err() << "ERROR:" << std::endl;
146  }
147  else
148    suite.err() << "Ok" << std::endl;
149
150
151  suite.err() << "MatrixLookup::training_data(const std::vector<size_t>)...";
152  const classifier::MatrixLookup* TrnData =
153    new MatrixLookup(m2, utility::Index(one), false);
154  if (TrnData->rows() != m2.rows() || TrnData->columns()!=one.size()){
155    suite.add(false);
156    suite.err() << "ERROR:" << std::endl;
157  }
158  else
159    suite.err() << "Ok" << std::endl;
160  delete TrnData;
161
162  suite.err() << "MatrixLookup::validation_data(const std::vector<size_t>,\n"
163         << "                              const std::vector<size_t>)...";
164  std::vector<size_t> val(23,2);
165  const classifier::MatrixLookup* ValData = 
166    new MatrixLookup(m2, utility::Index(val), false);
167  if (ValData->rows() != m2.rows() || TrnData->columns()!=val.size()){
168    suite.add(false);
169    suite.err() << "ERROR:" << std::endl;
170  }
171  else
172    suite.err() << "Ok" << std::endl;
173  delete ValData;
174
175  return suite.return_value();
176}
177
178utility::Matrix matrix(size_t n)
179{
180  utility::Matrix res(n,n);
181  for (size_t i=0;i<n;i++)
182    for (size_t j=0;j<n;j++)
183      res(i,j)=10*i+j;
184  return res;
185}
186
187
Note: See TracBrowser for help on using the repository browser.