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

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

fixed so test can be run outside 'make check'

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 7.3 KB
Line 
1// $Id: wenni_test.cc 846 2008-12-01 18:41:08Z 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 "c++_tools/gslapi/matrix.h"
25
26#include <cassert>
27#include <cmath>
28#include <cstdlib>
29#include <iostream>
30#include <fstream>
31#include <sstream>
32#include <string>
33#include <unistd.h>
34
35bool check_default_results(void);
36bool check_knni_results(void);
37bool check_raw_results(void);
38bool check_wenni_snr_results(void);
39bool cleanup(void);
40bool compare(const std::string&, const std::string&, double error_bound=1e-20);
41bool diff(const std::string&, const std::string&);
42std::string get_srcdir(void);
43bool rm(const std::string& filename);
44
45int main(const int argc,const char* argv[])
46{ 
47  bool teststatus=false;
48
49  teststatus|=check_raw_results();
50  teststatus|=check_default_results();
51
52  std::string srcdir=get_srcdir();
53  std::stringstream system_call;
54  system_call << "./nni -data default_results/wenni_logratio.data"
55              << " -neighbours 10 -weight " << srcdir
56              << "/../data/wenni_snr.data -weight_is_snr"
57              << " > wenni_imputed.data";
58  if (system(system_call.str().c_str())) {
59    teststatus|=true;
60    std::cerr << "ERROR: system call failed:\n\t" << system_call << std::endl;
61  }
62  teststatus|=check_wenni_snr_results();
63
64  system_call.str("");
65  system_call << "./nni -data default_results/wenni_logratio.data -neighbours 10"
66              << " -nni_algorithm kNNI -weight default_results/wenni_weight.data"
67              << " -weight_cutoff 0.5 > knni_imputed.data";
68  if (system(system_call.str().c_str())) {
69    teststatus|=true;
70    std::cerr << "ERROR: system call failed:\n\t" << system_call << std::endl;
71  }
72  teststatus|=check_knni_results();
73
74  //teststatus|=cleanup();
75
76  return (teststatus ? -1 : 0);
77}
78
79
80bool check_default_results(void)
81{
82  std::string srcdir=get_srcdir();
83
84  bool teststatus=false;
85  teststatus|=diff("default_results/BASEfile.data",
86                   srcdir+"/../data/basefile_in.data");
87  teststatus|=diff("default_results/basefile_out.data",
88                   srcdir+"/../data/basefile_out.data");
89  teststatus|=compare("default_results/wenni_BCh1SD.data",
90                      srcdir+"/../data/wenni_BCh1SD.data");
91  teststatus|=compare("default_results/wenni_BCh2SD.data",
92                      srcdir+"/../data/wenni_BCh2SD.data");
93  teststatus|=compare("default_results/wenni_imputed.data",
94                      srcdir+"/../data/wenni_imputed.data");
95  teststatus|=compare("default_results/wenni_intensity1.data",
96                      srcdir+"/../data/wenni_intensity1.data");
97  teststatus|=compare("default_results/wenni_intensity2.data",
98                      srcdir+"/../data/wenni_intensity2.data");
99  teststatus|=compare("default_results/wenni_logratio.data",
100                      srcdir+"/../data/wenni_logratio.data");
101  teststatus|=compare("default_results/wenni_weight.data",
102                      srcdir+"/../data/wenni_weight.data");
103  if (teststatus)
104    std::cerr << "ERROR: check_default_results failed." << std::endl;
105  return teststatus;
106}
107
108
109bool check_knni_results(void)
110{
111  std::string srcdir=get_srcdir();
112  bool teststatus=false;
113  teststatus|=diff("knni_imputed.data",srcdir+"/../data/knni_imputed.data");
114  if (teststatus)
115    std::cerr << "ERROR: check_knni_results failed." << std::endl;
116  return teststatus;
117}
118
119
120bool check_raw_results(void)
121{
122  std::string srcdir=get_srcdir();
123
124  bool teststatus=false;
125  teststatus|=diff("raw_results/BASEfile.data",
126                   srcdir+"/../data/basefile_in.data");
127  teststatus|=diff("raw_results/basefile_out.data","../data/basefile_out.data");
128  teststatus|=compare("raw_results/wenni_BCh1Mean.data",
129                      srcdir+"/../data/wenni_BCh1Mean.data");
130  teststatus|=compare("raw_results/wenni_BCh1SD.data",
131                      srcdir+"/../data/wenni_BCh1SD.data");
132  teststatus|=compare("raw_results/wenni_BCh2Mean.data",
133                      srcdir+"/../data/wenni_BCh2Mean.data");
134  teststatus|=compare("raw_results/wenni_BCh2SD.data",
135                      srcdir+"/../data/wenni_BCh2SD.data");
136  teststatus|=compare("raw_results/wenni_FCh1Mean.data",
137                      srcdir+"/../data/wenni_FCh1Mean.data");
138  teststatus|=compare("raw_results/wenni_FCh2Mean.data",
139                      srcdir+"/../data/wenni_FCh2Mean.data");
140  teststatus|=compare("raw_results/wenni_imputed.data",
141                      srcdir+"/../data/wenni_imputed.data");
142  teststatus|=compare("raw_results/wenni_logratio.data",
143                      srcdir+"/../data/wenni_logratio.data");
144  teststatus|=compare("raw_results/wenni_weight.data",
145                      srcdir+"/../data/wenni_weight.data");
146  if (teststatus)
147    std::cerr << "ERROR: check_raw_results failed." << std::endl;
148  return teststatus;
149}
150
151
152bool check_wenni_snr_results(void)
153{
154  bool teststatus=false;
155  std::string srcdir=get_srcdir();
156  teststatus|=compare("wenni_imputed.data",srcdir+"/../data/wenni_imputed.data",
157                      1.1e-11);
158  if (teststatus)
159    std::cerr << "ERROR: check_wenni_results failed." << std::endl;
160  return teststatus;
161}
162
163
164bool cleanup(void)
165{
166  bool teststatus=false;
167  teststatus|=rm("BASEfile.data");
168  teststatus|=rm("basefile_out.data");
169  teststatus|=rm("knni_imputed.data");
170  teststatus|=rm("wenni_BCh1Mean.data");
171  teststatus|=rm("wenni_BCh1SD.data");
172  teststatus|=rm("wenni_BCh2Mean.data");
173  teststatus|=rm("wenni_BCh2SD.data");
174  teststatus|=rm("wenni_FCh1Mean.data");
175  teststatus|=rm("wenni_FCh2Mean.data");
176  teststatus|=rm("wenni_imputed.data");
177  teststatus|=rm("wenni_intensity1.data");
178  teststatus|=rm("wenni_intensity2.data");
179  teststatus|=rm("wenni_logratio.data");
180  teststatus|=rm("wenni_weight.data");
181  return teststatus;
182}
183
184
185bool compare(const std::string& a,const std::string& b, double error_bound)
186{
187  bool teststatus=false;
188  std::ifstream astream(a.c_str());
189  assert(astream.good());
190  std::ifstream bstream(b.c_str());
191  assert(bstream.good());
192  theplu::gslapi::matrix adata(astream);
193  theplu::gslapi::matrix bdata(bstream);
194  adata-=bdata;
195  for (size_t i=0; i<adata.rows(); i++)
196    for (size_t j=0; j<adata.columns(); j++)
197      if ((fabs(adata(i,j))>error_bound) || // result outside acceptable bounds
198          (!((adata(i,j)==adata(i,j)))))    // calucaltion error detected
199        teststatus=true;
200  astream.close();
201  bstream.close();
202  if (teststatus)
203    std::cerr << "ERROR: compare " << a << " " << b << std::endl;
204  return teststatus;
205}
206
207
208bool diff(const std::string& a,const std::string& b)
209{
210  std::ifstream is1(a.c_str());
211  assert(is1.good());
212  std::ifstream is2(a.c_str());
213  assert(is2.good());
214  std::string str1;
215  std::string str2;
216  while (getline(is1,str1)){
217    getline(is2,str2);
218    if (str1!=str2) {
219      std::cerr << "ERROR: diff " << a << " " << b << std::endl;
220      return true;
221    }
222  }
223  return false;
224}
225
226
227std::string get_srcdir(void)
228{
229  char* buf=std::getenv("srcdir");
230  if (buf)
231    return buf;
232  return ".";
233 
234}
235
236
237bool rm(const std::string& filename) {
238  if (unlink(filename.c_str())) {
239    std::cerr << "ERROR: unlink call failed for: " << filename << std::endl;
240    return true;
241  }
242  return false;
243}
Note: See TracBrowser for help on using the repository browser.