#include #include "mat.hpp" using namespace std; template void test(int x, int y) { auto zero = mat::zero(x, x); auto ident = mat::identity(x); assert(zero == mat::filled(x, x, 0)); assert(ident == mat::diagonal(x, 1)); assert(zero.width() == x); assert(zero.height() == x); assert(ident.width() == x); assert(ident.height() == x); assert(ident * zero == zero); assert(zero * zero == zero); assert(ident + zero == ident); assert(ident - zero == ident); assert((zero *= ident) == zero); assert((zero *= zero) == zero); assert((ident += zero) == ident); assert((ident -= zero) == ident); assert(ident.transposition() == ident); mat m1(x, y), m2(y, x); assert(m1.height() == x); assert(m1.width() == y); assert(m2.height() == y); assert(m2.width() == x); for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { T val = (i * y) + j + 1; m1.set(i, j, val); m2.set(j, i, m1.get(i, j)); } } assert(m1.transposition() == m2); assert(m1 == m2.transposition()); auto m1m2 = m1 * m2; auto m2m1(m2 * m1); assert(m1m2.height() == m1.height()); assert(m1m2.width() == m2.width()); assert(m2m1.height() == m2.height()); assert(m2m1.width() == m1.width()); assert(m1m2 != m2m1); assert(m1m2 * ident == m1m2); assert(m1m2 * zero == zero); assert(m1m2.transposition().transposition() == m1m2); } int main() { test(1, 2); test(2, 3); test(3, 4); test(3, 5); test(3, 6); test(8, 8); test(1, 2); test(2, 3); test(3, 4); test(3, 5); test(3, 6); test(8, 8); test(1, 2); test(2, 3); test(3, 4); test(3, 5); test(3, 6); test(8, 8); test(1, 2); test(2, 3); test(3, 4); test(3, 5); test(3, 6); test(8, 8); return 0; }