source: trunk/test/matrix_lookup_test.cc @ 1240

Last change on this file since 1240 was 1240, checked in by Peter, 14 years ago

working on #223

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