#include <stdio.h>
#include <iostream>
using namespace std;
#define ELEMENTS(x) (sizeof(x)/sizeof(x[0]))
#define MATRIX_TEST1_ROWS 2
#define MATRIX_TEST1_COLUMNS 3
#define MATRIX_TEST_SCALAR -10
void testMatrix1(void)
{
const MATRIX_VALUE values[MATRIX_TEST1_ROWS*MATRIX_TEST1_COLUMNS] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
size_t rows, columns;
size_t i, j;
assert(A != NULL);
rows = 0;
assert(rows == MATRIX_TEST1_ROWS);
columns = 0;
assert(columns == MATRIX_TEST1_COLUMNS);
rows = 0;
columns = 0;
assert(rows == MATRIX_TEST1_ROWS);
assert(columns == MATRIX_TEST1_COLUMNS);
for(i = 0; i < MATRIX_TEST1_ROWS; i++){
for(j = 0; j < MATRIX_TEST1_COLUMNS; j++){
assert(v == values[i*MATRIX_TEST1_COLUMNS+j]);
}
}
for(i = 0; i < MATRIX_TEST1_ROWS; i++){
size_t valueCount = ELEMENTS(row);
assert(valueCount == MATRIX_TEST1_COLUMNS);
for(j = 0; j < MATRIX_TEST1_COLUMNS; j++){
assert(row[j] == values[i*MATRIX_TEST1_COLUMNS+j]);
}
}
for(j = 0; j < MATRIX_TEST1_COLUMNS; j++){
size_t valueCount = ELEMENTS(column);
assert(valueCount == MATRIX_TEST1_ROWS);
for(i = 0; i < MATRIX_TEST1_ROWS; i++){
assert(column[i] == values[i*MATRIX_TEST1_COLUMNS+j]);
}
}
assert(C != NULL);
assert(rows == MATRIX_TEST1_COLUMNS);
assert(columns == MATRIX_TEST1_ROWS);
for(i = 0; i < MATRIX_TEST1_COLUMNS; i++){
size_t valueCount = ELEMENTS(row);
assert(valueCount == MATRIX_TEST1_ROWS);
for(j = 0; j < MATRIX_TEST1_ROWS; j++){
assert(row[j] == values[i+j*MATRIX_TEST1_COLUMNS]);
}
}
for(j = 0; j < MATRIX_TEST1_ROWS; j++){
size_t valueCount = ELEMENTS(column);
assert(valueCount == MATRIX_TEST1_COLUMNS);
for(i = 0; i < MATRIX_TEST1_COLUMNS; i++){
assert(column[i] == values[i+j*MATRIX_TEST1_COLUMNS]);
}
}
assert(D != NULL);
assert(C == NULL);
size_t valueCount = ELEMENTS(row);
row[0] = row[2];
assert(D == NULL);
assert(D != NULL);
for(i = 0; i < MATRIX_TEST1_ROWS; i++){
for(j = 0; j < MATRIX_TEST1_COLUMNS; j++){
assert(v == values[i*MATRIX_TEST1_COLUMNS+j] * MATRIX_TEST_SCALAR);
}
}
assert(D == NULL);
for(i = 0; i < MATRIX_TEST1_ROWS; i++){
for(j = 0; j < MATRIX_TEST1_COLUMNS; j++){
assert(v == values[i*MATRIX_TEST1_COLUMNS+j] * 2);
}
}
assert(D == NULL);
assert(D != NULL);
for(i = 0; i < MATRIX_TEST1_ROWS; i++){
for(j = 0; j < MATRIX_TEST1_COLUMNS; j++){
assert(v == 0);
}
}
assert(D == NULL);
assert(A == NULL);
}
#define MATRIX_TEST2_ROWS 2
#define MATRIX_TEST2_COLUMNS 2
void testMatrix2(void)
{
const MATRIX_VALUE values[MATRIX_TEST2_ROWS*MATRIX_TEST2_COLUMNS] = {1.0, 4.0, 7.0, 8.0 };
assert(A != NULL);
assert(determinant == -20);
assert(A == NULL);
}
#define MATRIX_TEST3_ROWS 3
#define MATRIX_TEST3_COLUMNS 3
void testMatrix3(void)
{
const MATRIX_VALUE values[MATRIX_TEST3_ROWS*MATRIX_TEST3_COLUMNS] = {1.0, 2.0, 3.0, 1.0, 4.0, 6.0, 1.0, 1.0, 1.0 };
assert(A != NULL);
assert(determinant == -1);
assert(A == NULL);
}
#define MATRIX_TEST4_ELEMENTS 3
void testMatrix4(void)
{
const MATRIX_VALUE values[MATRIX_TEST4_ELEMENTS*MATRIX_TEST4_ELEMENTS] = {1.0, 2.0, 1.0, 4.0, 6.0, 1.0, 0.0, 1.0, 2.0 };
register size_t i;
assert(A != NULL);
assert(B != NULL);
assert(determinant == -1);
assert(C != NULL);
assert(E != NULL);
for(i = 0; i < MATRIX_TEST4_ELEMENTS; i++){
}
}
#define MATRIX_TEST5_ROWS 5
#define MATRIX_TEST5_COLUMNS 5
void testMatrix5(void)
{
const MATRIX_VALUE values[MATRIX_TEST5_ROWS*MATRIX_TEST5_COLUMNS] = { 100.0, 10.0, 50.0, 38.0, 16.0,
14.0, 28.0, 87.0, 10.0, 1.0,
0.0, 99.0, 23.0, 15.0, 1.0,
85.0, 93.0, 48.0, 64.0, 55.0,
68.0, 41.0, 3.0, 44.0, 33.0 };
assert(A != NULL);
assert(determinant == 100289562);
assert(B != NULL);
assert(A != B);
}
#define MATRIX_TEST6_ROWS 3
#define MATRIX_TEST6_COLUMNS 3
void testMatrix6(void)
{
const MATRIX_VALUE values[MATRIX_TEST6_ROWS*MATRIX_TEST6_COLUMNS] = { 3.0, 2.0, -1.0,
2.0, -2.0, +4.0,
-1.0, 0.5, -1.0};
const MATRIX_VALUE result_y[MATRIX_TEST6_COLUMNS] = { 1.0, -2.0, 0.0};
const MATRIX_VALUE result_a[MATRIX_TEST6_COLUMNS] = { 1.0, -2.0, -2.0};
assert(A != NULL);
assert(
matrixSet(A, values, ELEMENTS(values)));
assert(y != NULL);
assert(
vectorSet(y, result_y, ELEMENTS(result_y)));
assert(expected_a != NULL);
assert(
vectorSet(expected_a, result_a, ELEMENTS(result_a)));
assert(a != NULL);
}
void testVector1(void)
{
register size_t i, j;
size_t dimension;
assert(a != NULL);
assert(v == values[i]);
}
{
size_t vCount = VECTOR_STANDARD_DIMENSION -1;
vCount = VECTOR_STANDARD_DIMENSION + 1;
assert(vCount == VECTOR_STANDARD_DIMENSION);
}
assertDouble(scalar, sqrt(values[0] * values[0] + values[1] * values[1] + values[2] * values[2]));
assert(b != NULL);
assert(
vectorSet(b, values, ELEMENTS(values)));
}
assert(v == values[(VECTOR_STANDARD_DIMENSION-1) - i]);
}
assert(c != NULL);
assert(v == (values[(VECTOR_STANDARD_DIMENSION-1) - i] + values[i]));
}
assert(c == NULL);
assert(c != NULL);
assert(v == (values[i] - values[(VECTOR_STANDARD_DIMENSION-1) - i]));
}
assert(c == NULL);
assert(scalar == values[0] * values[2] + values[1] * values[1] + values[2] * values[0]);
assert(c != NULL);
{
assert(v == (values[1] * values[(VECTOR_STANDARD_DIMENSION-1) - 2] - values[2] * values[(VECTOR_STANDARD_DIMENSION-1) - 1]));
assert(v == (values[2] * values[(VECTOR_STANDARD_DIMENSION-1) - 0] - values[0] * values[(VECTOR_STANDARD_DIMENSION-1) - 2]));
assert(v == (values[0] * values[(VECTOR_STANDARD_DIMENSION-1) - 1] - values[1] * values[(VECTOR_STANDARD_DIMENSION-1) - 0]));
}
assert(c == NULL);
size_t rows, columns;
assert(rows == VECTOR_STANDARD_DIMENSION);
assert(columns == VECTOR_STANDARD_DIMENSION);
assert(v == values[i] * values[(VECTOR_STANDARD_DIMENSION-1)-j]);
}
}
assert(a == NULL);
assert(b == NULL);
assert(scalar == 2*2*2);
assert(a == NULL);
assert(b == NULL);
assert(c == NULL);
}
int main()
{
testMatrix1();
testMatrix2();
testMatrix3();
testMatrix4();
testMatrix5();
testMatrix6();
testVector1();
return 0;
}