test/kernel_lookup.cc

Code
Comments
Other
Rev Date Author Line
537 05 Mar 06 peter 1 // $Id$
537 05 Mar 06 peter 2
675 10 Oct 06 jari 3 /*
2119 12 Dec 09 peter 4   Copyright (C) 2006, 2007, 2008 Jari H√§kkinen, Peter Johansson
4207 26 Aug 22 peter 5   Copyright (C) 2010, 2012, 2022 Peter Johansson
537 05 Mar 06 peter 6
1437 25 Aug 08 peter 7   This file is part of the yat library, http://dev.thep.lu.se/yat
537 05 Mar 06 peter 8
675 10 Oct 06 jari 9   The yat library is free software; you can redistribute it and/or
675 10 Oct 06 jari 10   modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 11   published by the Free Software Foundation; either version 3 of the
675 10 Oct 06 jari 12   License, or (at your option) any later version.
675 10 Oct 06 jari 13
675 10 Oct 06 jari 14   The yat library is distributed in the hope that it will be useful,
675 10 Oct 06 jari 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
675 10 Oct 06 jari 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
675 10 Oct 06 jari 17   General Public License for more details.
675 10 Oct 06 jari 18
675 10 Oct 06 jari 19   You should have received a copy of the GNU General Public License
1487 10 Sep 08 jari 20   along with yat. If not, see <http://www.gnu.org/licenses/>.
675 10 Oct 06 jari 21 */
675 10 Oct 06 jari 22
2881 18 Nov 12 peter 23 #include <config.h>
2881 18 Nov 12 peter 24
1237 15 Mar 08 peter 25 #include "Suite.h"
1237 15 Mar 08 peter 26
1121 22 Feb 08 peter 27 #include "yat/utility/Matrix.h"
675 10 Oct 06 jari 28 #include "yat/classifier/DataLookup1D.h"
675 10 Oct 06 jari 29 #include "yat/classifier/KernelLookup.h"
675 10 Oct 06 jari 30 #include "yat/classifier/Kernel_SEV.h"
675 10 Oct 06 jari 31 #include "yat/classifier/MatrixLookup.h"
675 10 Oct 06 jari 32 #include "yat/classifier/PolynomialKernelFunction.h"
675 10 Oct 06 jari 33
537 05 Mar 06 peter 34 #include <fstream>
537 05 Mar 06 peter 35 #include <iostream>
537 05 Mar 06 peter 36 #include <vector>
537 05 Mar 06 peter 37
680 11 Oct 06 jari 38 using namespace theplu::yat;
537 05 Mar 06 peter 39
1237 15 Mar 08 peter 40 int main(int argc, char* argv[])
537 05 Mar 06 peter 41 {
680 11 Oct 06 jari 42   using namespace theplu::yat::classifier;
537 05 Mar 06 peter 43
1237 15 Mar 08 peter 44   theplu::yat::test::Suite suite(argc, argv);
537 05 Mar 06 peter 45
1237 15 Mar 08 peter 46   suite.err() << "\nTesting KernelLookup" << std::endl;
1121 22 Feb 08 peter 47   utility::Matrix data_core(1,5);
537 05 Mar 06 peter 48   for (size_t i=0; i<data_core.columns(); i++)
537 05 Mar 06 peter 49     data_core(0,i)=i;
537 05 Mar 06 peter 50   classifier::MatrixLookup data(data_core);
537 05 Mar 06 peter 51   classifier::PolynomialKernelFunction kf;
537 05 Mar 06 peter 52   classifier::Kernel_SEV kernel(data,kf);
537 05 Mar 06 peter 53
1237 15 Mar 08 peter 54   suite.err() << "KernelLookup::KernelLookup(const Kernel&)...";
537 05 Mar 06 peter 55   classifier::KernelLookup k1(kernel);
628 05 Sep 06 peter 56   if (k1.rows()!=kernel.size() || k1.columns()!=kernel.size()) {
1237 15 Mar 08 peter 57     suite.add(false);
1237 15 Mar 08 peter 58     suite.err() <<   "ERROR:" << std::endl;
1237 15 Mar 08 peter 59     suite.err() << "Dimensions do not agree." << std::endl;
537 05 Mar 06 peter 60   }
537 05 Mar 06 peter 61   else {
4200 19 Aug 22 peter 62     for (size_t i=0; i<k1.rows(); i++)
4200 19 Aug 22 peter 63       for (size_t j=0; j<k1.columns(); j++)
537 05 Mar 06 peter 64         if (k1(i,j)!=kernel(i,j)) {
1237 15 Mar 08 peter 65           suite.add(false);
1237 15 Mar 08 peter 66           suite.err() << "ERROR:\n"
537 05 Mar 06 peter 67                  << "KernelLookup::KernelLookup(const Kernel& data)"
537 05 Mar 06 peter 68                  << std::endl;
4200 19 Aug 22 peter 69           suite.err() << "k(" << i << "," << j << ") is " << k1(i,j)
537 05 Mar 06 peter 70                  << "expected " << kernel(i,j) << std::endl;
537 05 Mar 06 peter 71         }
1237 15 Mar 08 peter 72     if (suite.ok())
1237 15 Mar 08 peter 73       suite.err() << "Ok." << std::endl;
537 05 Mar 06 peter 74   }
537 05 Mar 06 peter 75
537 05 Mar 06 peter 76   std::vector<size_t> index_odd;
537 05 Mar 06 peter 77   index_odd.push_back(1);
537 05 Mar 06 peter 78   index_odd.push_back(3);
537 05 Mar 06 peter 79   std::vector<size_t> index_even;
537 05 Mar 06 peter 80   index_even.push_back(2);
537 05 Mar 06 peter 81   index_even.push_back(0);
537 05 Mar 06 peter 82   index_even.push_back(4);
1237 15 Mar 08 peter 83   suite.err() << "KernelLookup::KernelLookup(const Kernel&,\n"
537 05 Mar 06 peter 84          << "                           const vector<size_t>&,\n"
537 05 Mar 06 peter 85          << "                           const vector<size_t>&)...";
1134 23 Feb 08 peter 86   classifier::KernelLookup k2(kernel,utility::Index(index_odd),
1134 23 Feb 08 peter 87                               utility::Index(index_even));
537 05 Mar 06 peter 88   if (k2.rows()!=index_odd.size() || k2.columns()!=index_even.size()) {
1237 15 Mar 08 peter 89     suite.add(false);
1237 15 Mar 08 peter 90     suite.err() << "ERROR:" << std::endl;
1237 15 Mar 08 peter 91     suite.err() << "Dimensions do not agree." << std::endl;
537 05 Mar 06 peter 92   }
4200 19 Aug 22 peter 93   for (size_t i=0; i<k2.rows(); i++)
4200 19 Aug 22 peter 94     for (size_t j=0; j<k2.columns(); j++)
537 05 Mar 06 peter 95       if (k2(i,j)!=kernel(index_odd[i],index_even[j])) {
1237 15 Mar 08 peter 96         suite.add(false);
1237 15 Mar 08 peter 97         suite.err() << "ERROR:\n"
537 05 Mar 06 peter 98                << "KernelLookup::KernelLookup(const Kernel& data)"
537 05 Mar 06 peter 99                << std::endl;
4200 19 Aug 22 peter 100         suite.err() << "k(" << i << "," << j << ") is " << k2(i,j)
537 05 Mar 06 peter 101                << "expected " << kernel(index_odd[i],index_even[j]) << std::endl;
537 05 Mar 06 peter 102       }
1237 15 Mar 08 peter 103   if (suite.ok())
1237 15 Mar 08 peter 104     suite.err() << "Ok." << std::endl;
4200 19 Aug 22 peter 105
1237 15 Mar 08 peter 106   suite.err() << "KernelLookup::KernelLookup(const KernelLookup&,\n"
537 05 Mar 06 peter 107          << "                           const vector<size_t>&,\n"
537 05 Mar 06 peter 108          << "                           const vector<size_t>&)...";
537 05 Mar 06 peter 109   std::vector<size_t> one(1,1);
1134 23 Feb 08 peter 110   classifier::KernelLookup k3(k2,utility::Index(one),utility::Index(one));
537 05 Mar 06 peter 111   if (k3.rows()!=one.size() || k3.columns()!=one.size()) {
1237 15 Mar 08 peter 112     suite.add(false);
1237 15 Mar 08 peter 113     suite.err() <<   "ERROR:" << std::endl;
1237 15 Mar 08 peter 114     suite.err() << "Dimensions do not agree." << std::endl;
537 05 Mar 06 peter 115   }
537 05 Mar 06 peter 116   else if (k3(0,0)!=k2(1,1)){
1237 15 Mar 08 peter 117     suite.add(false);
4200 19 Aug 22 peter 118     suite.err() << "ERROR:\n k3(0,0) found to be " << k3(0,0)
537 05 Mar 06 peter 119            << " expected " << k2(1,1) << std::endl;
537 05 Mar 06 peter 120   }
537 05 Mar 06 peter 121   else
1237 15 Mar 08 peter 122     suite.err() << "Ok." << std::endl;
537 05 Mar 06 peter 123
1237 15 Mar 08 peter 124   suite.err() << "KernelLookup::KernelLookup(const KernelLookup&)...";
537 05 Mar 06 peter 125   classifier::KernelLookup k4(k2);
538 05 Mar 06 peter 126   if (k4.rows()!=k2.rows() || k4.columns()!=k2.columns()) {
1237 15 Mar 08 peter 127     suite.add(false);
1237 15 Mar 08 peter 128     suite.err() <<   "ERROR:" << std::endl;
1237 15 Mar 08 peter 129     suite.err() << "Dimensions do not agree." << std::endl;
1237 15 Mar 08 peter 130     suite.err() << "Dimension: rows " << k4.rows() << " columns " << k4.columns()
538 05 Mar 06 peter 131            << "\nOriginal: rows " << k2.rows() << " columns " << k2.columns()
538 05 Mar 06 peter 132            << std::endl;
537 05 Mar 06 peter 133   }
537 05 Mar 06 peter 134   else {
4200 19 Aug 22 peter 135     for (size_t i=0; i<k4.rows(); i++)
4200 19 Aug 22 peter 136       for (size_t j=0; j<k4.columns(); j++)
537 05 Mar 06 peter 137         if (k4(i,j)!=k2(i,j)) {
1237 15 Mar 08 peter 138           suite.add(false);
1237 15 Mar 08 peter 139           suite.err() << "ERROR:\n"
537 05 Mar 06 peter 140                  << "KernelLookup::KernelLookup(const KernelLookup&)"
537 05 Mar 06 peter 141                  << std::endl;
4200 19 Aug 22 peter 142           suite.err() << "k(" << i << "," << j << ") is " << k4(i,j)
537 05 Mar 06 peter 143                  << "expected " << k2(i,j) << std::endl;
537 05 Mar 06 peter 144         }
537 05 Mar 06 peter 145   }
4200 19 Aug 22 peter 146
1134 23 Feb 08 peter 147   KernelLookup k5(k1,utility::Index(index_even),utility::Index(index_even));
559 11 Mar 06 peter 148   std::vector<size_t> index5;
559 11 Mar 06 peter 149   index5.push_back(0);
559 11 Mar 06 peter 150   index5.push_back(2);
1167 26 Feb 08 peter 151   const KernelLookup* k6 = new KernelLookup(k5,utility::Index(index5),
4200 19 Aug 22 peter 152                                             utility::Index(index5));
4200 19 Aug 22 peter 153   for (size_t s=0; s<k6->rows(); s++)
4200 19 Aug 22 peter 154     for (size_t t=0; t<k6->rows(); t++)
1237 15 Mar 08 peter 155       suite.add((*k6)(s,t)==(*k6)(t,s));
559 11 Mar 06 peter 156
2143 15 Jan 10 peter 157   suite.test_concept_container2d(*k6);
2143 15 Jan 10 peter 158
1237 15 Mar 08 peter 159   return suite.return_value();
537 05 Mar 06 peter 160 }