#include <iostream>
#include "matrix.hh"
#include "matrix.hh"
#include "vector.hh"


void check_mat_as_const(const Matrix& A)
{
  //for (unsigned int i = 0; i < A.rows(); ++i) {
  //  for (unsigned int j = 0; j < A.cols() ++j) {
  //    std::cout << "A.get_entry(" << i << ", " << j << ") = " << A.get_entry(i, j);
  //  }
  //}
  //std::cout << "A = " << A << std::endl;
  //std::cout << "A.transpose() = " << A.transpose() << std::endl;

  //const Matrix B(3, 2, 1.0);

  //std::cout << "A.add(B) = " << A.add(B) << std::endl;

  //std::cout << "A + B = " << A + B << std::endl;

  //for (unsigned int i = 0; i < A.rows(); ++i) {
  //  for (unsigned int j = 0; j < A.cols() ++j) {
  //    std::cout << "A[" << i << "][" << j << "] = " << A[i][j];
  //  }
  //}

  //const Matrix C(2, 3, -1.0);

  //std::cout << "A - B = " << A - B << std::endl;
  //std::cout << "A*C = " << A*C << std::endl;

  //const Vector u(2, 1.0);
  //std::cout << "A*u = " << A*u << std::endl;

  //std::cout << "det of A is " << A.det() << std::endl;
}


int main()
{
  Matrix A(2, 3, 0.0);
  //for (unsigned int i = 0; i < A.rows(); j++) {
  //  for (unsigned int j = 0; j < A.cols(); j++) {
  //    A.set_entry(i, j, i+j);
  //  }
  //}

  check_mat_as_const(A);

  //for (unsigned int i = 0; i < A.rows(); j++) {
  //  Vector& row = A[i];
  //  for (unsigned int j = 0; j < row.size(); j++) {
  //    row[j] = i;
  //  }
  //}

  //const Matrix B(2, 3, 1.0);

  //A += B;
  //std::cout << A << std::endl;
  //(A += B) += B;

  //Matrix empty;
  //std::cout << "empty = " << empty << std::endl;

  //A.scal(2.5);
  //std::cout << "A = " << A << std::endl;
  //A *= 0.75;
  //std::cout << "A = " << A << std::endl;

  //A.axpy(B, 0.5);
  //std::cout << "A = " << A << std::endl;

  return 0;
}