source: trunk/test/data_lookup_1d_test.cc @ 593

Last change on this file since 593 was 593, checked in by Markus Ringnér, 15 years ago

Fixed std includes to compile with g++ 4.1.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.3 KB
Line 
1// $Id: data_lookup_1d_test.cc 593 2006-08-25 12:59:21Z markus $
2
3#include <c++_tools/gslapi/matrix.h>
4#include <c++_tools/classifier/DataLookup1D.h>
5#include <c++_tools/classifier/MatrixLookup.h>
6
7#include <fstream>
8#include <iostream>
9#include <vector>
10#include <cmath>
11
12using namespace theplu;
13
14gslapi::matrix matrix(size_t n);
15
16int main(const int argc,const char* argv[])
17{
18  using namespace theplu::classifier;
19
20  std::ostream* error;
21  if (argc>1 && argv[1]==std::string("-v"))
22    error = &std::cerr;
23  else {
24    error = new std::ofstream("/dev/null");
25    if (argc>1)
26      std::cout << "lookup_test -v : for printing extra information\n";
27  }
28
29  *error << "Testing Lookup Classes" << std::endl;
30  bool ok = true;
31
32  *error << "Testing DataLookup1D" << std::endl;
33  gslapi::matrix gsl_m1(matrix(5));
34  std::vector<size_t> index_odd;
35  index_odd.push_back(1);
36  index_odd.push_back(3);
37  std::vector<size_t> index_even;
38  index_even.push_back(2);
39  index_even.push_back(0);
40  index_even.push_back(4);
41  classifier::MatrixLookup m1(gsl_m1,index_odd,index_even);
42  *error << gsl_m1 << std::endl << '\n';
43  *error << m1 << std::endl;
44  *error << "DataLookup1D::DataLookup1D(const MatrixLookup&\n"
45         << "                           const size_t, const bool)...";
46  classifier::DataLookup1D v1(m1,1, true);
47  if (v1.size()!=m1.columns() || v1(0)!=m1(1,0) || 
48      v1(1)!=m1(1,1) ) {
49    ok =false;
50    *error << "\nERROR" << std::endl;
51    *error << "size: " << v1.size() << " expected " << m1.columns() << "\n" 
52           << "v1(0): " << v1(0) << " expected " << m1(1,0) << "\n"
53           << "v1(1): " << v1(1) << " expected " << m1(1,1) 
54           << std::endl;
55  }
56  else
57    *error << "Ok" << std::endl;
58
59  *error << "DataLookup1D::DataLookup1D(const MatrixLookup&\n"
60         << "                           const size_t, const bool false)...";
61  classifier::DataLookup1D v2(m1,1,false);
62  if (v2.size()!=m1.rows() || v2(0)!=m1(0,1) || v2(1)!=m1(1,1) ) {
63    ok =false;
64    *error << "\nERROR\n"
65           << "size: " << v2.size() << " expected " << m1.rows() << "\n" 
66           << "v2(0): " << v2(0) << " expected " << m1(0,1) << "\n"
67           << "v2(1): " << v2(1) << " expected " << m1(1,1) 
68           << std::endl;
69  }
70  else
71    *error << "Ok" << std::endl;
72
73  *error << "DataLookup1D::DataLookup1D(const DataLookup1D&)...";
74  classifier::DataLookup1D v3(v2);
75  if (v3.size()!=v2.size() || v3(0)!=v2(0) || v3(1)!=v2(1) ) {
76    ok =false;
77    *error << "\nERROR\n"
78           << "size: " << v3.size() << " expected " << v2.size() << "\n" 
79           << "v2(0): " << v3(0) << " expected " << v2(0) << "\n"
80           << "v2(1): " << v3(1) << " expected " <<  v2(1)
81           << std::endl;
82  }
83  else
84    *error << "Ok" << std::endl;
85
86  *error << "DataLookup1D::DataLookup1D(const size_t, const double)...";
87  classifier::DataLookup1D v4(12,3);
88  if (v4.size()!=12 || v4(10)!=3 ) {
89    ok =false;
90    *error << "\nERROR\n"
91           << "size: " << v4.size() << " expected " << 12 << "\n" 
92           << "v2(0): " << v4(10) << " expected " << 3 
93           << std::endl;
94  }
95  else
96    *error << "Ok" << std::endl;
97
98  *error << "Testing that output from ostream operator for DataLookup1D"
99         << " can be used by the gslapi::vector istream constructor...";
100
101  // First with a vector with no missing values separated by ' '.
102  std::ofstream my_out("data/tmp_test_datalookup1D.txt");
103  my_out << v1;
104  my_out.close();
105  std::ifstream is("data/tmp_test_datalookup1D.txt");
106  gslapi::vector v5(is);
107  is.close();
108  if (v5.size()!=v1.size() || v5(0)!=v1(0) || v5(1)!=v1(1) ||
109      v5(2)!=v1(2)) {
110    ok=false;
111    *error << "\nERROR\n" << std::endl;
112  }
113  unlink("data/tmp_test_datalookup1D.txt");
114 
115  // Second with a vector with a missing value separated by '\t'.
116  gsl_m1(3,0)=std::numeric_limits<double>::quiet_NaN();
117  classifier::DataLookup1D v6(m1,1, true); 
118  my_out.open("data/tmp_test_datalookup1D.txt");
119  char prev=my_out.fill('\t');
120  my_out << v1;
121  my_out.fill(prev);
122  my_out.close();
123  is.open("data/tmp_test_datalookup1D.txt");
124  gslapi::vector v7(is,'\t');
125  is.close();
126  if (v7.size()!=v6.size() || !std::isnan(v7(1))) {
127    ok=false;
128    *error << "\nERROR\n"
129           << "size: " << v7.size() << " expected " << v6.size() << "\n" 
130           << "v7(1): " << v7(1) << " expected nan\n" 
131           << std::endl;
132  }
133  unlink("data/tmp_test_datalookup1D.txt");
134   
135
136  if (ok)
137    *error << "Ok." << std::endl;
138  if (error!=&std::cerr)
139    delete error;
140  return (ok ? 0 : -1);
141}
142
143gslapi::matrix matrix(size_t n)
144{
145  gslapi::matrix res(n,n);
146  for (size_t i=0;i<n;i++)
147    for (size_t j=0;j<n;j++)
148      res(i,j)=10*i+j;
149  return res;
150}
151
Note: See TracBrowser for help on using the repository browser.