source: plugins/base1/se.lu.thep.wenni/trunk/test/wenni_test.cc @ 849

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

defining state variable in config.h and when not in base1 mode slice out tests in wenni_test that are base1 specific.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 7.4 KB
Line 
1// $Id: wenni_test.cc 849 2008-12-01 21:01:33Z peter $
2
3/*
4  Copyright (C) 2005, 2006 Jari Häkkinen
5  Copyright (C) 2007 2008 Peter Johansson
6
7  This file is part of WeNNI,
8  http://baseplugins.thep.lu.se/wiki/se.lu.thep.WeNNI
9
10  WeNNI is free software; you can redistribute it and/or modify it
11  under the terms of the GNU General Public License as published by
12  the Free Software Foundation; either version 3 of the License, or
13  (at your option) any later version.
14
15  WeNNI is distributed in the hope that it will be useful, but WITHOUT
16  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
18  License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with WeNNI. If not, see <http://www.gnu.org/licenses/>.
22*/
23
24#include <config.h>
25
26#include "c++_tools/gslapi/matrix.h"
27
28#include <cassert>
29#include <cmath>
30#include <cstdlib>
31#include <iostream>
32#include <fstream>
33#include <sstream>
34#include <string>
35#include <unistd.h>
36
37bool check_default_results(void);
38bool check_knni_results(void);
39bool check_raw_results(void);
40bool check_wenni_snr_results(void);
41bool cleanup(void);
42bool compare(const std::string&, const std::string&, double error_bound=1e-20);
43bool diff(const std::string&, const std::string&);
44std::string get_srcdir(void);
45bool rm(const std::string& filename);
46
47int main(const int argc,const char* argv[])
48{ 
49  bool teststatus=false;
50
51  if (WeNNI_STATE == "base1") {
52    teststatus|=check_raw_results();
53    teststatus|=check_default_results();
54  }
55
56  std::string srcdir=get_srcdir();
57  std::stringstream system_call;
58  system_call << "./nni -data " << srcdir << "/../data/wenni_logratio.data"
59              << " -neighbours 10 -weight " << srcdir
60              << "/../data/wenni_snr.data -weight_is_snr"
61              << " > wenni_imputed.data";
62  if (system(system_call.str().c_str())) {
63    teststatus|=true;
64    std::cerr << "ERROR: system call failed:\n\t" << system_call << std::endl;
65  }
66  teststatus|=check_wenni_snr_results();
67
68  system_call.str("");
69  system_call << "./nni -data " << srcdir
70              << "/../data/wenni_logratio.data -neighbours 10"
71              << " -nni_algorithm kNNI -weight " << srcdir
72              << "/../data/wenni_weight.data"
73              << " -weight_cutoff 0.5 > knni_imputed.data";
74  if (system(system_call.str().c_str())) {
75    teststatus|=true;
76    std::cerr << "ERROR: system call failed:\n\t" << system_call << std::endl;
77  }
78  teststatus|=check_knni_results();
79
80  //teststatus|=cleanup();
81
82  return (teststatus ? -1 : 0);
83}
84
85
86bool check_default_results(void)
87{
88  std::string srcdir=get_srcdir();
89
90  bool teststatus=false;
91  teststatus|=diff("default_results/BASEfile.data",
92                   srcdir+"/../data/basefile_in.data");
93  teststatus|=diff("default_results/basefile_out.data",
94                   srcdir+"/../data/basefile_out.data");
95  teststatus|=compare("default_results/wenni_BCh1SD.data",
96                      srcdir+"/../data/wenni_BCh1SD.data");
97  teststatus|=compare("default_results/wenni_BCh2SD.data",
98                      srcdir+"/../data/wenni_BCh2SD.data");
99  teststatus|=compare("default_results/wenni_imputed.data",
100                      srcdir+"/../data/wenni_imputed.data");
101  teststatus|=compare("default_results/wenni_intensity1.data",
102                      srcdir+"/../data/wenni_intensity1.data");
103  teststatus|=compare("default_results/wenni_intensity2.data",
104                      srcdir+"/../data/wenni_intensity2.data");
105  teststatus|=compare("default_results/wenni_logratio.data",
106                      srcdir+"/../data/wenni_logratio.data");
107  teststatus|=compare("default_results/wenni_weight.data",
108                      srcdir+"/../data/wenni_weight.data");
109  if (teststatus)
110    std::cerr << "ERROR: check_default_results failed." << std::endl;
111  return teststatus;
112}
113
114
115bool check_knni_results(void)
116{
117  std::string srcdir=get_srcdir();
118  bool teststatus=false;
119  teststatus|=diff("knni_imputed.data",srcdir+"/../data/knni_imputed.data");
120  if (teststatus)
121    std::cerr << "ERROR: check_knni_results failed." << std::endl;
122  return teststatus;
123}
124
125
126bool check_raw_results(void)
127{
128  std::string srcdir=get_srcdir();
129
130  bool teststatus=false;
131  teststatus|=diff("raw_results/BASEfile.data",
132                   srcdir+"/../data/basefile_in.data");
133  teststatus|=diff("raw_results/basefile_out.data","../data/basefile_out.data");
134  teststatus|=compare("raw_results/wenni_BCh1Mean.data",
135                      srcdir+"/../data/wenni_BCh1Mean.data");
136  teststatus|=compare("raw_results/wenni_BCh1SD.data",
137                      srcdir+"/../data/wenni_BCh1SD.data");
138  teststatus|=compare("raw_results/wenni_BCh2Mean.data",
139                      srcdir+"/../data/wenni_BCh2Mean.data");
140  teststatus|=compare("raw_results/wenni_BCh2SD.data",
141                      srcdir+"/../data/wenni_BCh2SD.data");
142  teststatus|=compare("raw_results/wenni_FCh1Mean.data",
143                      srcdir+"/../data/wenni_FCh1Mean.data");
144  teststatus|=compare("raw_results/wenni_FCh2Mean.data",
145                      srcdir+"/../data/wenni_FCh2Mean.data");
146  teststatus|=compare("raw_results/wenni_imputed.data",
147                      srcdir+"/../data/wenni_imputed.data");
148  teststatus|=compare("raw_results/wenni_logratio.data",
149                      srcdir+"/../data/wenni_logratio.data");
150  teststatus|=compare("raw_results/wenni_weight.data",
151                      srcdir+"/../data/wenni_weight.data");
152  if (teststatus)
153    std::cerr << "ERROR: check_raw_results failed." << std::endl;
154  return teststatus;
155}
156
157
158bool check_wenni_snr_results(void)
159{
160  bool teststatus=false;
161  std::string srcdir=get_srcdir();
162  teststatus|=compare("wenni_imputed.data",srcdir+"/../data/wenni_imputed.data",
163                      1.1e-11);
164  if (teststatus)
165    std::cerr << "ERROR: check_wenni_results failed." << std::endl;
166  return teststatus;
167}
168
169
170bool cleanup(void)
171{
172  bool teststatus=false;
173  teststatus|=rm("BASEfile.data");
174  teststatus|=rm("basefile_out.data");
175  teststatus|=rm("knni_imputed.data");
176  teststatus|=rm("wenni_BCh1Mean.data");
177  teststatus|=rm("wenni_BCh1SD.data");
178  teststatus|=rm("wenni_BCh2Mean.data");
179  teststatus|=rm("wenni_BCh2SD.data");
180  teststatus|=rm("wenni_FCh1Mean.data");
181  teststatus|=rm("wenni_FCh2Mean.data");
182  teststatus|=rm("wenni_imputed.data");
183  teststatus|=rm("wenni_intensity1.data");
184  teststatus|=rm("wenni_intensity2.data");
185  teststatus|=rm("wenni_logratio.data");
186  teststatus|=rm("wenni_weight.data");
187  return teststatus;
188}
189
190
191bool compare(const std::string& a,const std::string& b, double error_bound)
192{
193  bool teststatus=false;
194  std::ifstream astream(a.c_str());
195  assert(astream.good());
196  std::ifstream bstream(b.c_str());
197  assert(bstream.good());
198  theplu::gslapi::matrix adata(astream);
199  theplu::gslapi::matrix bdata(bstream);
200  adata-=bdata;
201  for (size_t i=0; i<adata.rows(); i++)
202    for (size_t j=0; j<adata.columns(); j++)
203      if ((fabs(adata(i,j))>error_bound) || // result outside acceptable bounds
204          (!((adata(i,j)==adata(i,j)))))    // calucaltion error detected
205        teststatus=true;
206  astream.close();
207  bstream.close();
208  if (teststatus)
209    std::cerr << "ERROR: compare " << a << " " << b << std::endl;
210  return teststatus;
211}
212
213
214bool diff(const std::string& a,const std::string& b)
215{
216  std::ifstream is1(a.c_str());
217  assert(is1.good());
218  std::ifstream is2(a.c_str());
219  assert(is2.good());
220  std::string str1;
221  std::string str2;
222  while (getline(is1,str1)){
223    getline(is2,str2);
224    if (str1!=str2) {
225      std::cerr << "ERROR: diff " << a << " " << b << std::endl;
226      return true;
227    }
228  }
229  return false;
230}
231
232
233std::string get_srcdir(void)
234{
235  char* buf=std::getenv("srcdir");
236  if (buf)
237    return buf;
238  return ".";
239 
240}
241
242
243bool rm(const std::string& filename) {
244  if (unlink(filename.c_str())) {
245    std::cerr << "ERROR: unlink call failed for: " << filename << std::endl;
246    return true;
247  }
248  return false;
249}
Note: See TracBrowser for help on using the repository browser.