// Testing functions for matrix assignments
#include "gmd.h"
#include <iostream>
using namespace std;
// #ifndef __FILE__
// # define __FILE__ "unknown"
// #endif
// #ifndef __LINE__
// # define __LINE__ "unknown"
// #endif
#define check_assert(expr) if (!(expr)) { std::cout << __FILE__ << ": Failed check in line " << __LINE__ << std::endl; error = true; }
int main(int argc, char* argv[]){
bool error = false;
// Just an example matrix
LaGenMatDouble A(1,3);
A(0,0)=0; A(0,1)=1; A(0,2)=2;
A.debug(1);
LaGenMatDouble B = A(LaIndex(),LaIndex(1,2)); // huh? Is a reference to A
cout << "^^^^^^^ here was the error" << endl;
LaGenMatDouble D(A(LaIndex(),LaIndex(0,1))); // copy ctor? also a reference. sigh.
cout << "^^^^^^^ and another error" << endl;
// A.debug(0);
LaGenMatDouble C;
C = A(LaIndex(),LaIndex(1,2)); // correctly creates a copy of A
cout << "B.info= " << B.info() << endl;
cout << "D.info= " << B.info() << endl;
cout << "C.info= " << C.info() << endl;
cout << "A is" << endl << A << "B is" << endl << B
<< "C is" << endl << C << "D is" << endl << D;
LaGenMatDouble B2 = A(LaIndex(),LaIndex(1,2)).copy(); // huh? Is a reference to A
LaGenMatDouble D2(A(LaIndex(),LaIndex(0,1)).copy()); // copy ctor? also a reference. sigh.
B(0,0) = 10;
D(0,0) = 20;
cout << "A is" << endl << A << "B is" << endl << B
<< "C is" << endl << C << "D is" << endl << D;
// Unfortunately these are known to fail:
check_assert(A(0,1) == 1);
check_assert(A(0,0) == 0);
if (error) {
cout << "Ignoring known errors." << endl;
error = false;
}
// These, on the other hand, work correctly:
check_assert(C(0,0) == 1);
check_assert(B2(0,0) == 1);
check_assert(D2(0,0) == 0);
return error ? 1 : 0;
}
syntax highlighted by Code2HTML, v. 0.9.1