source: trunk/test/kernel_lookup_test.cc @ 2119

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

converted files to utf-8. fixes #577

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.2 KB
Line 
1// $Id: kernel_lookup_test.cc 2119 2009-12-12 23:11:43Z peter $
2
3/*
4  Copyright (C) 2006, 2007, 2008 Jari Häkkinen, Peter Johansson
5
6  This file is part of the yat library, http://dev.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 3 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 yat. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#include "Suite.h"
23
24#include "yat/utility/Matrix.h"
25#include "yat/classifier/DataLookup1D.h"
26#include "yat/classifier/KernelLookup.h"
27#include "yat/classifier/Kernel_SEV.h"
28#include "yat/classifier/MatrixLookup.h"
29#include "yat/classifier/PolynomialKernelFunction.h"
30
31#include <fstream>
32#include <iostream>
33#include <vector>
34
35using namespace theplu::yat;
36
37int main(int argc, char* argv[])
38{
39  using namespace theplu::yat::classifier;
40
41  theplu::yat::test::Suite suite(argc, argv);
42
43  suite.err() << "\nTesting KernelLookup" << std::endl;
44  utility::Matrix data_core(1,5);
45  for (size_t i=0; i<data_core.columns(); i++)
46    data_core(0,i)=i;
47  classifier::MatrixLookup data(data_core);
48  classifier::PolynomialKernelFunction kf;
49  classifier::Kernel_SEV kernel(data,kf);
50
51  suite.err() << "KernelLookup::KernelLookup(const Kernel&)...";
52  classifier::KernelLookup k1(kernel);
53  if (k1.rows()!=kernel.size() || k1.columns()!=kernel.size()) {
54    suite.add(false);
55    suite.err() <<  "ERROR:" << std::endl;
56    suite.err() << "Dimensions do not agree." << std::endl;
57  }
58  else {
59    for (size_t i=0; i<k1.rows(); i++) 
60      for (size_t j=0; j<k1.columns(); j++) 
61        if (k1(i,j)!=kernel(i,j)) {
62          suite.add(false);
63          suite.err() << "ERROR:\n"
64                 << "KernelLookup::KernelLookup(const Kernel& data)"
65                 << std::endl;
66          suite.err() << "k(" << i << "," << j << ") is " << k1(i,j) 
67                 << "expected " << kernel(i,j) << std::endl;
68        }
69    if (suite.ok())
70      suite.err() << "Ok." << std::endl;
71  }
72
73  std::vector<size_t> index_odd;
74  index_odd.push_back(1);
75  index_odd.push_back(3);
76  std::vector<size_t> index_even;
77  index_even.push_back(2);
78  index_even.push_back(0);
79  index_even.push_back(4);
80  suite.err() << "KernelLookup::KernelLookup(const Kernel&,\n"
81         << "                           const vector<size_t>&,\n"
82         << "                           const vector<size_t>&)...";
83  classifier::KernelLookup k2(kernel,utility::Index(index_odd),
84                              utility::Index(index_even));
85  if (k2.rows()!=index_odd.size() || k2.columns()!=index_even.size()) {
86    suite.add(false);
87    suite.err() << "ERROR:" << std::endl;
88    suite.err() << "Dimensions do not agree." << std::endl;
89  }
90  for (size_t i=0; i<k2.rows(); i++) 
91    for (size_t j=0; j<k2.columns(); j++) 
92      if (k2(i,j)!=kernel(index_odd[i],index_even[j])) {
93        suite.add(false);
94        suite.err() << "ERROR:\n"
95               << "KernelLookup::KernelLookup(const Kernel& data)"
96               << std::endl;
97        suite.err() << "k(" << i << "," << j << ") is " << k2(i,j) 
98               << "expected " << kernel(index_odd[i],index_even[j]) << std::endl;
99      }
100  if (suite.ok())
101    suite.err() << "Ok." << std::endl;
102 
103  suite.err() << "KernelLookup::KernelLookup(const KernelLookup&,\n"
104         << "                           const vector<size_t>&,\n"
105         << "                           const vector<size_t>&)...";
106  std::vector<size_t> one(1,1);
107  classifier::KernelLookup k3(k2,utility::Index(one),utility::Index(one));
108  if (k3.rows()!=one.size() || k3.columns()!=one.size()) {
109    suite.add(false);
110    suite.err() <<  "ERROR:" << std::endl;
111    suite.err() << "Dimensions do not agree." << std::endl;
112  }
113  else if (k3(0,0)!=k2(1,1)){
114    suite.add(false);
115    suite.err() << "ERROR:\n k3(0,0) found to be " << k3(0,0) 
116           << " expected " << k2(1,1) << std::endl;
117  }
118  else
119    suite.err() << "Ok." << std::endl;
120
121  suite.err() << "KernelLookup::KernelLookup(const KernelLookup&)...";
122  classifier::KernelLookup k4(k2);
123  if (k4.rows()!=k2.rows() || k4.columns()!=k2.columns()) {
124    suite.add(false);
125    suite.err() <<  "ERROR:" << std::endl;
126    suite.err() << "Dimensions do not agree." << std::endl;
127    suite.err() << "Dimension: rows " << k4.rows() << " columns " << k4.columns()
128           << "\nOriginal: rows " << k2.rows() << " columns " << k2.columns()
129           << std::endl;
130  }
131  else {
132    for (size_t i=0; i<k4.rows(); i++) 
133      for (size_t j=0; j<k4.columns(); j++) 
134        if (k4(i,j)!=k2(i,j)) {
135          suite.add(false);
136          suite.err() << "ERROR:\n"
137                 << "KernelLookup::KernelLookup(const KernelLookup&)"
138                 << std::endl;
139          suite.err() << "k(" << i << "," << j << ") is " << k4(i,j) 
140                 << "expected " << k2(i,j) << std::endl;
141        }
142  }
143 
144  KernelLookup k5(k1,utility::Index(index_even),utility::Index(index_even));
145  std::vector<size_t> index5;
146  index5.push_back(0);
147  index5.push_back(2);
148  const KernelLookup* k6 = new KernelLookup(k5,utility::Index(index5),
149                                            utility::Index(index5)); 
150  for (size_t s=0; s<k6->rows(); s++) 
151    for (size_t t=0; t<k6->rows(); t++) 
152      suite.add((*k6)(s,t)==(*k6)(t,s));
153
154  return suite.return_value();
155}
156
Note: See TracBrowser for help on using the repository browser.