#include "Matrix.h"
#include "Matrix_test_helpers.h"
#include "unit_test_framework.h"
using namespace std;
TEST(test_fill_basic) {
Matrix *mat = new Matrix; // create a Matrix in dynamic memory
const int width = 3;
const int height = 5;
const int value = 42;
Matrix_init(mat, width, height);
Matrix_fill(mat, value);
for(int r = 0; r < height; ++r){
for(int c = 0; c < width; ++c){
ASSERT_EQUAL(*Matrix_at(mat, r, c), value);
}
}
delete mat; // delete the Matrix
}
TEST(test_fill_edge) {
Matrix *mat = new Matrix;
const int width = 1;
const int height = 1;
const int value = 0;
Matrix_init(mat, width, height);
Matrix_fill(mat, value);
for(int r = 0; r < height; ++r){
for(int c = 0; c < width; ++c){
ASSERT_EQUAL(*Matrix_at(mat, r, c), value);
}
}
delete mat;
}
TEST(test_init1) {
Matrix *mat = new Matrix;
Matrix_init(mat, 1, 1);
ASSERT_EQUAL(Matrix_width(mat), 1);
ASSERT_EQUAL(Matrix_height(mat), 1);
delete mat;
}
TEST(test_init2) {
Matrix *mat = new Matrix;
Matrix_init(mat, 3, 5);
ASSERT_EQUAL(Matrix_width(mat), 3);
ASSERT_EQUAL(Matrix_height(mat), 5);
delete mat;
}
TEST(test_print_basic) {
Matrix *mat = new Matrix;
Matrix_init(mat, 3, 3);
Matrix_fill(mat, 1);
*Matrix_at(mat, 0, 0) = 2;
ostringstream expected;
expected << "3 3\n"
<< "2 1 1 \n"
<< "1 1 1 \n"
<< "1 1 1 \n";
ostringstream actual;
Matrix_print(mat, actual);
ASSERT_EQUAL(expected.str(), actual.str());
delete mat;
}
TEST(test_print_edge1) {
Matrix *mat = new Matrix;
Matrix_init(mat, 1, 1);
*Matrix_at(mat, 0, 0) = 42;
ostringstream expected;
expected << "1 1\n"
<< "42 \n";
ostringstream actual;
Matrix_print(mat, actual);
ASSERT_EQUAL(expected.str(), actual.str());
delete mat;
}
TEST(test_print_edge2) {
Matrix *mat = new Matrix;
Matrix_init(mat, 2, 3);
Matrix_fill(mat, 1);
*Matrix_at(mat, 0, 0) = 2;
ostringstream expected;
expected << "2 3\n"
<< "2 1 \n"
<< "1 1 \n"
<< "1 1 \n";
ostringstream actual;
Matrix_print(mat, actual);
ASSERT_EQUAL(expected.str(), actual.str());
delete mat;
}
TEST(test_width_basic) {
Matrix *mat = new Matrix;
Matrix_init(mat, 3, 5);
ASSERT_EQUAL(Matrix_width(mat), 3);
delete mat;
}
TEST(test_height_basic) {
Matrix *mat = new Matrix;
Matrix_init(mat, 3, 5);
ASSERT_EQUAL(Matrix_height(mat), 5);
delete mat;
}
TEST(test_row_basic) {
Matrix *mat = new Matrix;
Matrix_init(mat, 5, 3);
int* ptr = Matrix_at(mat, 2, 2);
ASSERT_EQUAL(Matrix_row(mat, ptr), 2);
delete mat;
}
TEST(test_row_edge) {
Matrix *mat = new Matrix;
Matrix_init(mat, 1, 1);
int* ptr = Matrix_at(mat, 0, 0);
ASSERT_EQUAL(Matrix_row(mat, ptr), 0);
delete mat;
}
TEST(test_column_basic) {
Matrix *mat = new Matrix;
Matrix_init(mat, 5, 3);
int* ptr = Matrix_at(mat, 2, 4);
ASSERT_EQUAL(Matrix_column(mat, ptr), 4);
delete mat;
}
TEST(test_column_edge) {
Matrix *mat = new Matrix;
Matrix_init(mat, 1, 1);
int* ptr = Matrix_at(mat, 0, 0);
ASSERT_EQUAL(Matrix_column(mat, ptr), 0);
delete mat;
}
TEST(test_fill_border_basic) {
Matrix *mat = new Matrix;
const int width = 3;
const int height = 5;
const int value = 42;
Matrix_init(mat, 3, 5);
Matrix_fill_border(mat, value);
for (int r = 0; r < height; ++r){
for (int c = 0; c < width; ++c){
if (r == 0 || r == (Matrix_height(mat) - 1) || c == 0 || c == (Matrix_width(mat) - 1)) {
ASSERT_EQUAL(*Matrix_at(mat, r, c), value);
}
}
}
delete mat;
}
TEST(test_fill_border_edge1) {
Matrix *mat1 = new Matrix;
Matrix *mat2 = new Matrix;
const int width = 2;
const int height = 2;
const int value = 42;
Matrix_init(mat1, width, height);
Matrix_fill_border(mat1, value);
Matrix_init(mat2, width, height);
Matrix_fill(mat2, value);
ASSERT_TRUE(Matrix_equal(mat1, mat2));
delete mat1;
delete mat2;
}
TEST(test_fill_border_edge2) {
Matrix *mat1 = new Matrix;
Matrix *mat2 = new Matrix;
const int width = 1;
const int height = 1;
const int value = 42;
Matrix_init(mat1, width, height);
Matrix_fill_border(mat1, value);
Matrix_init(mat2, width, height);
*Matrix_at(mat2, 0, 0) = value;
ASSERT_TRUE(Matrix_equal(mat1, mat2));
delete mat1;
delete mat2;
}
TEST(test_max_basic) {
Matrix *mat = new Matrix;
const int value = 1;
Matrix_init(mat, 5, 3);
Matrix_fill(mat, value);
*Matrix_at(mat, 2, 4) = 2;
ASSERT_EQUAL(Matrix_max(mat), 2);
delete mat;
}
TEST(test_max_edge1) {
Matrix *mat = new Matrix;
const int value = 1;
Matrix_init(mat, 5, 3);
Matrix_fill(mat, value);
*Matrix_at(mat, 0, 4) = 2;
*Matrix_at(mat, 1, 3) = 2;
*Matrix_at(mat, 2, 2) = 2;
ASSERT_EQUAL(Matrix_max(mat), 2);
delete mat;
}
TEST(test_max_edge2) {
Matrix *mat = new Matrix;
const int value = 1;
Matrix_init(mat, 1, 1);
*Matrix_at(mat, 0, 0) = value;
ASSERT_EQUAL(Matrix_max(mat), 1);
delete mat;
}
TEST(test_max_edge3) {
Matrix *mat = new Matrix;
const int value = -1;
Matrix_init(mat, 3, 3);
Matrix_fill(mat, -2);
*Matrix_at(mat, 0, 0) = value;
ASSERT_EQUAL(Matrix_max(mat), -1);
delete mat;
}
TEST(test_column_of_min_basic) {
Matrix *mat = new Matrix;
const int value = 5;
Matrix_init(mat, 3, 5);
Matrix_fill(mat, value);
*Matrix_at(mat, 3, 1) = 3;
ASSERT_EQUAL(Matrix_column_of_min_value_in_row(mat, 3, 0, 2), 1);
delete mat;
}
TEST(test_column_of_min_edge1) {
Matrix *mat = new Matrix;
const int value = 5;
Matrix_init(mat, 3, 5);
Matrix_fill(mat, value);
*Matrix_at(mat, 3, 1) = 3;
*Matrix_at(mat, 3, 2) = 3;
ASSERT_EQUAL(Matrix_column_of_min_value_in_row(mat, 3, 0, 2), 1);
delete mat;
}
TEST(test_column_of_min_edge2) {
Matrix *mat = new Matrix;
Matrix_init(mat, 1, 1);
*Matrix_at(mat, 0, 0) = 3;
ASSERT_EQUAL(Matrix_column_of_min_value_in_row(mat, 0, 0, 1), 0);
delete mat;
}
TEST(test_min_value_basic) {
Matrix *mat = new Matrix;
const int value = 5;
Matrix_init(mat, 3, 5);
Matrix_fill(mat, value);
*Matrix_at(mat, 3, 1) = 3;
ASSERT_EQUAL(Matrix_min_value_in_row(mat, 3, 0, 2), 3);
delete mat;
}
TEST(test_min_value_edge1) {
Matrix *mat = new Matrix;
const int value = 5;
Matrix_init(mat, 3, 5);
Matrix_fill(mat, value);
*Matrix_at(mat, 3, 1) = 3;
*Matrix_at(mat, 3, 2) = 3;
ASSERT_EQUAL(Matrix_min_value_in_row(mat, 3, 0, 2), 3);
delete mat;
}
TEST(test_min_value_edge2) {
Matrix *mat = new Matrix;
Matrix_init(mat, 1, 1);
*Matrix_at(mat, 0, 0) = 3;
ASSERT_EQUAL(Matrix_min_value_in_row(mat, 0, 0, 1), 3);
delete mat;
}
TEST(test_matrix_at) {
Matrix *mat = new Matrix;
Matrix_init(mat, 1, 1);
*Matrix_at(mat, 0, 0) = 3;
ASSERT_EQUAL(*Matrix_at(mat, 0, 0), 3);
delete mat;
}
TEST(test_matrix_at_const) {
Matrix *mat = new Matrix;
Matrix_init(mat, 1, 1);
*Matrix_at(mat, 0, 0) = 3;
ASSERT_EQUAL(*Matrix_at(mat, 0, 0), 3);
delete mat;
}
TEST_MAIN() // Do NOT put a semicolon here