#include "matrix.h"

using namespace std;

int main()
{
  Matrix<double> m(4, 4);
  cout << "Matrix<double> m(4, 4);" << endl;
  cout << m << endl;

  Matrix<double> identity(4, 4, 1.);
  cout << "Matrix<double> identity(4, 4, 1.);" << endl;
  cout << identity << endl;

  Matrix<double> m2(identity);
  cout << "Matrix<double> m2(identity);" << endl;
  cout << m2 << endl;
  m = identity;
  cout << "m = identity;" << endl;
  cout << m << endl;

  m = m;
  cout << "m = m" << endl;
  cout << m << endl;
  
  cout << "m hat " << m.getRows() << " Zeilen und "
       << m.getColumns() << " Spalten." << endl << endl;

  double werte[16] = {
     1.3, 0.4, 2.6, 8.2, 6.2, 1.7, 1.3, 8.3,
     4.2, 7.4, 2.7, 1.9, 6.3, 8.1, 5.6, 6.6 };

  Matrix<double> m3(2, 8, werte);
  cout << "Matrix<double> m3(2, 8, werte);" << endl;
  cout << m3 << endl;

  Matrix<double> m4(identity), m5(4, 4);
  cout << "Matrix<double> m4(identity), m5(4, 4);" << endl;
  try {
    cout << "m4 = m3*identity;" << endl;
    m4 = m3*identity;
    cout << m4 << endl;
  }
  catch (ArgumentsNotMatching) {
  	cout << "Fehler: Multiplikation mit unpassenden Dimensionen" << endl;
  }
  try {
    cout << "m5 = m3 + m4;" << endl;
    m5 = m3 + m4;
    cout << m5 << endl;
  }
  catch (ArgumentsNotMatching) {
  	cout << "Fehler: Addition mit unpassenden Dimensionen" << endl;
  }
  
  m3 = Matrix<double>(4, 4, werte);
  m5 = m3 + m4;
  cout << "m3 = Matrix<double>(4, 4, werte);" << endl;
  cout << "m5 = m3 + m4;" << endl;
  cout << m5 << endl;
  m5 *= m3;
  cout << "m5 *= m3;" << endl;
  cout << m5 << endl;

  m5 = (m3 + m4)*m3;
  cout << "m5 = (m3 + m4)*m3;" << endl;
  cout << m5 << endl;
  
  m5 *= 2.;
  cout << "m5 *= 2;" << endl;
  cout << m5 << endl;
  
  m5 = 2.*m5;
  cout << "m5 = 2.*m5;" << endl;
  cout << m5 << endl;

  return 0;
}

