test/target.cc

Code
Comments
Other
Rev Date Author Line
509 18 Feb 06 peter 1 // $Id$
509 18 Feb 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) 2012, 2022 Peter Johansson
509 18 Feb 06 peter 6
1437 25 Aug 08 peter 7   This file is part of the yat library, http://dev.thep.lu.se/yat
675 10 Oct 06 jari 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
1248 19 Mar 08 peter 25 #include "Suite.h"
1248 19 Mar 08 peter 26
675 10 Oct 06 jari 27 #include "yat/classifier/Target.h"
1134 23 Feb 08 peter 28 #include "yat/utility/Index.h"
675 10 Oct 06 jari 29
509 18 Feb 06 peter 30 #include <fstream>
509 18 Feb 06 peter 31 #include <iostream>
509 18 Feb 06 peter 32 #include <string>
509 18 Feb 06 peter 33 #include <vector>
509 18 Feb 06 peter 34
680 11 Oct 06 jari 35 using namespace theplu::yat;
509 18 Feb 06 peter 36
1248 19 Mar 08 peter 37 int main( int argc, char* argv[])
4200 19 Aug 22 peter 38 {
1248 19 Mar 08 peter 39   test::Suite suite(argc, argv);
1248 19 Mar 08 peter 40   suite.err() << "testing target" << std::endl;
509 18 Feb 06 peter 41
509 18 Feb 06 peter 42   // This test assumes classes are introduced in order of appearence
509 18 Feb 06 peter 43   std::vector<std::string> color(10,"default");
509 18 Feb 06 peter 44   color[2]=color[7]="white";
509 18 Feb 06 peter 45   color[4]=color[5]="black";
509 18 Feb 06 peter 46   color[6]=color[3]="green";
509 18 Feb 06 peter 47   color[8]=color[9]="red";
509 18 Feb 06 peter 48   classifier::Target target3(color);
509 18 Feb 06 peter 49   std::vector<size_t> facit(10);
509 18 Feb 06 peter 50   facit[2]=facit[7]=1;
509 18 Feb 06 peter 51   facit[4]=facit[5]=3;
509 18 Feb 06 peter 52   facit[6]=facit[3]=2;
509 18 Feb 06 peter 53   facit[8]=facit[9]=4;
4200 19 Aug 22 peter 54
509 18 Feb 06 peter 55   for (size_t i=0; i<facit.size(); i++){
509 18 Feb 06 peter 56     if (target3(i)!=facit[i]){
1248 19 Mar 08 peter 57       suite.add(false);
4200 19 Aug 22 peter 58       suite.err() << "target(" << i << ") is " << target3(0) << " expected "
509 18 Feb 06 peter 59              << facit[i] << std::endl;
509 18 Feb 06 peter 60     }
509 18 Feb 06 peter 61   }
521 22 Feb 06 peter 62   std::vector<size_t> sub;
521 22 Feb 06 peter 63   sub.push_back(2);
521 22 Feb 06 peter 64   sub.push_back(1);
1134 23 Feb 08 peter 65   classifier::Target sub_target(target3,utility::Index(sub));
521 22 Feb 06 peter 66   if (target3(sub[0])!=sub_target(0) || target3(sub[1])!=sub_target(1)){
1248 19 Mar 08 peter 67     suite.add(false);
1248 19 Mar 08 peter 68     suite.err() << "error in constructor Target(const Target&, std::vector<size_t>&)"
521 22 Feb 06 peter 69            << "\nclasses are not preserved" << std::endl;
521 22 Feb 06 peter 70   }
4200 19 Aug 22 peter 71   if (target3.binary(sub[0])!=sub_target.binary(0) ||
521 22 Feb 06 peter 72       target3.binary(sub[1])!=sub_target.binary(1)){
1248 19 Mar 08 peter 73     suite.add(false);
1248 19 Mar 08 peter 74     suite.err() << "error in constructor Target(const Target&, std::vector<size_t>&)"
521 22 Feb 06 peter 75            << "\nbinary classes are not preserved" << std::endl;
521 22 Feb 06 peter 76   }
521 22 Feb 06 peter 77
521 22 Feb 06 peter 78
509 18 Feb 06 peter 79   std::vector<std::string> label(31,"negative");
4200 19 Aug 22 peter 80   for (size_t i=0; i<16; i++)
509 18 Feb 06 peter 81     label[i] = "positive";
509 18 Feb 06 peter 82   label[20]="neither";
509 18 Feb 06 peter 83   classifier::Target target(label);
509 18 Feb 06 peter 84   if (target.nof_classes()!=3){
1248 19 Mar 08 peter 85     suite.add(false);
1248 19 Mar 08 peter 86     suite.err() << "Expected number of classes to be 3" << std::endl;
509 18 Feb 06 peter 87   }
509 18 Feb 06 peter 88   if (target(0)!=0){
1248 19 Mar 08 peter 89     suite.add(false);
1248 19 Mar 08 peter 90     suite.err() << "Error: target(0)!=0" << std::endl;
509 18 Feb 06 peter 91   }
509 18 Feb 06 peter 92   if (target(20)!=2){
1248 19 Mar 08 peter 93     suite.add(false);
1248 19 Mar 08 peter 94     suite.err() << "Error: target(20)!=2" << std::endl;
509 18 Feb 06 peter 95   }
514 20 Feb 06 peter 96   if (!target.binary(0)){
1248 19 Mar 08 peter 97     suite.add(false);
1248 19 Mar 08 peter 98     suite.err() << "Error: target.binary(0) not true" << std::endl;
4200 19 Aug 22 peter 99   }
514 20 Feb 06 peter 100   if (target.binary(20)){
1248 19 Mar 08 peter 101     suite.add(false);
1248 19 Mar 08 peter 102     suite.err() << "Error: target.binary(20) not false" << std::endl;
4200 19 Aug 22 peter 103   }
514 20 Feb 06 peter 104   target.set_binary(2,true);
514 20 Feb 06 peter 105   if (!target.binary(20)){
1248 19 Mar 08 peter 106     suite.add(false);
1248 19 Mar 08 peter 107     suite.err() << "Error: target.binary(20) not true" << std::endl;
4200 19 Aug 22 peter 108   }
1251 03 Apr 08 peter 109   std::ifstream is(test::filename("data/rank_target.txt").c_str());
509 18 Feb 06 peter 110   classifier::Target target2(is);
509 18 Feb 06 peter 111   is.close();
509 18 Feb 06 peter 112   if (target2.size()!=6){
1248 19 Mar 08 peter 113     suite.add(false);
4200 19 Aug 22 peter 114     suite.err() << "ERROR: size of target is " << target2.size()
1248 19 Mar 08 peter 115                 << " expected 6."  << std::endl;
4200 19 Aug 22 peter 116   }
509 18 Feb 06 peter 117
1248 19 Mar 08 peter 118   suite.return_value();
509 18 Feb 06 peter 119 }