Changeset 417


Ignore:
Timestamp:
Dec 1, 2005, 11:20:31 PM (18 years ago)
Author:
Jari Häkkinen
Message:

Fixed delete bug in matrix dextructor, added more matrix tests.

Location:
branches/better_matrix_class
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/better_matrix_class/lib/gslapi/matrix.cc

    r415 r417  
    7575    if (view_)
    7676      delete view_;
    77     if (m_) {
     77    else if (m_)
    7878      gsl_matrix_free(m_);
    79       m_=NULL;
    80     }
     79    m_=NULL;
    8180  }
    8281
  • branches/better_matrix_class/test/matrix_test.cc

    r399 r417  
    33#include <c++_tools/gslapi/matrix.h>
    44
     5#include <unistd.h>
    56#include <fstream>
    67#include <iostream>
    78
    89int main(const int argc,const char* argv[])
    9 { 
     10{
    1011  using namespace theplu;
    1112  std::ostream* error;
     
    1718      std::cout << "matrix_test -v : for printing extra information\n";
    1819  }
    19   *error << "testing matrix" << std::endl;
     20  *error << "Testing matrix class" << std::endl;
    2021  bool ok = true;
    2122
     23  *error << "\tcopy constructor and operator!=" << std::endl;
    2224  gslapi::matrix m(3,3,9);
    2325  gslapi::matrix m2(m);
    2426  if (m2!=m)
    2527    ok=false;
     28
     29  *error << "\toutput operator and istream constructor" << std::endl;
    2630  std::ofstream my_out("data/tmp_test_matrix.txt");
    2731  my_out << m2;
    2832  my_out.close();
    29 
    3033  std::ifstream is("data/tmp_test_matrix.txt");
    3134  gslapi::matrix m3(is);
     
    3336  if (m3!=m2)
    3437    ok=false;
     38  unlink("data/tmp_test_matrix.txt");
    3539
     40  *error << "\toperator*(double)" << std::endl;
    3641  gslapi::matrix m4(3,3,1);
    3742  m4 *= 9;
    38  
    39   if (m4!=m){
     43  if (m4!=m) {
    4044    ok=false;
    4145    *error << "error operator*=(double)" << std::endl;
    4246  }
    4347
     48  *error << "\tsub-matrix" << std::endl;
     49  is.open("data/knni_matrix.data");
     50  gslapi::matrix m5(is);
     51  is.close();
     52  double m5_sum=0;
     53  for (size_t i=0; i<m5.rows(); ++i)
     54    for (size_t j=0; j<m5.columns(); ++j)
     55      m5_sum+=m5(i,j);
     56  gslapi::matrix* m5sub=new gslapi::matrix(m5,3,3,3,3);
     57  double m5sub_sum=0;
     58  for (size_t i=0; i<m5sub->rows(); ++i)
     59    for (size_t j=0; j<m5sub->columns(); ++j) {
     60      m5sub_sum+=(*m5sub)(i,j);
     61      (*m5sub)(i,j)=1;
     62    }
     63  delete m5sub;
     64  double m5_sum2=0;
     65  for (size_t i=0; i<m5.rows(); ++i)
     66    for (size_t j=0; j<m5.columns(); ++j)
     67      m5_sum2+=m5(i,j);
     68  if (m5_sum2-m5_sum-9+m5sub_sum>1e-13) {
     69    ok=false;
     70    *error << "error sub-matrix test" << std::endl;
     71  }
     72
     73  *error << "\tsub-(row)vector" << std::endl;
     74  gslapi::vector v5subrow(m5,3);
     75  double v5subrow_sum=0;
     76  for (size_t i=0; i<v5subrow.size(); ++i) {
     77    v5subrow_sum+=v5subrow(i);
     78    v5subrow[i]=0;
     79  }
     80  double m5_sum3=0;
     81  for (size_t i=0; i<m5.rows(); ++i)
     82    for (size_t j=0; j<m5.columns(); ++j)
     83      m5_sum3+=m5(i,j);
     84  if (m5_sum3-m5_sum2+v5subrow_sum>1e-13) {
     85    ok=false;
     86    *error << "error sub-vector test 1" << std::endl;
     87  }
     88
     89  *error << "\tsub-(column)vector" << std::endl;
     90  gslapi::vector v5subcolumn(m5,0,false);
     91  double v5subcolumn_sum=0;
     92  for (size_t i=0; i<v5subcolumn.size(); ++i) {
     93    v5subcolumn_sum+=v5subcolumn(i);
     94    v5subcolumn(i)=1;
     95  }
     96  double m5_sum4=0;
     97  for (size_t i=0; i<m5.rows(); ++i)
     98    for (size_t j=0; j<m5.columns(); ++j)
     99      m5_sum4+=m5(i,j);
     100  if (m5_sum4-m5_sum3-v5subcolumn.size()+v5subcolumn_sum>1e-13) {
     101    ok=false;
     102    *error << "error sub-vector test 2" << std::endl;
     103  }
     104  double v5subrow_sum2=0;
     105  for (size_t i=0; i<v5subrow.size(); ++i)
     106    v5subrow_sum2+=v5subrow(i);
     107  if (v5subrow_sum2-v5subcolumn(3)>1e-13) {
     108    ok=false;
     109    *error << "error sub-vector test 3" << std::endl;
     110  }
     111
     112  *error << "\tsub-vector and vector copying" << std::endl;
     113  gslapi::vector v6(v5subrow);
     114  v6.set_all(2);
     115  double v5subrow_sum3=0;
     116  for (size_t i=0; i<v5subrow.size(); ++i)
     117    v5subrow_sum3+=v5subrow(i);
     118  if (v5subrow_sum3-v5subrow_sum2>1e-13) {
     119    ok=false;
     120    *error << "error sub-vector test 4" << std::endl;
     121  }
     122  v5subrow.set(v6);
     123  double m5_sum5=0;
     124  for (size_t i=0; i<m5.rows(); ++i)
     125    for (size_t j=0; j<m5.columns(); ++j)
     126      m5_sum5+=m5(i,j);
     127  if (m5_sum5-m5_sum4-v5subrow.size()*2+v5subrow_sum3>1e-13) {
     128    ok=false;
     129    *error << "error sub-vector test 5" << std::endl;
     130  }
     131  v5subrow=gslapi::vector(23,22);
     132  double m5_sum6=0;
     133  for (size_t i=0; i<m5.rows(); ++i)
     134    for (size_t j=0; j<m5.columns(); ++j)
     135      m5_sum6+=m5(i,j);
     136  if (m5_sum6-m5_sum5>1e-13) {
     137    ok=false;
     138    *error << "error sub-vector test 6" << std::endl;
     139  }
    44140
    45141  if (error!=&std::cerr)
     
    47143
    48144  return (ok ? 0 : -1);
    49 
    50145}
Note: See TracChangeset for help on using the changeset viewer.