#define MATRIX_ADDR_TESTING #include "../../src/kaleidoscope/MatrixAddr.h" #include <iostream> #include <cassert> #include <string> #include <cxxabi.h> template<typename MA__> void logType() { std::cout << " rows:" << (int)MA__::rows << std::endl; std::cout << " cols:" << (int)MA__::cols << std::endl; std::cout << " rowSize:" << (int)MA__::rowSize << std::endl; } template<typename MA__> void testIndexedAccess() { MA__ ma2; ma2.setRow(1); ma2.setCol(3); assert(ma2 == MA__(1, 3)); ma2.setRow(7); assert(ma2 == MA__(7, 3)); ma2.setCol(5); assert(ma2 == MA__(7, 5)); MA__ ma3(3, 5); assert(ma3.row() == 3); assert(ma3.col() == 5); } template<typename MA__> std::string typenameString() { std::string nameString; char *name = 0; int status; name = abi::__cxa_demangle(typeid(MA__).name(), 0, 0, &status); if (name != 0) { nameString = name; } free(name); return nameString; } template<typename MA1__, typename MA2__> void testRelation() { std::cout << "***************************************" << std::endl; std::cout << "MA1:" << typenameString<MA1__>() << std::endl; logType<MA1__>(); std::cout << "MA2:" << typenameString<MA2__>() << std::endl; logType<MA2__>(); MA1__ mAddr1(3, 5); MA2__ mAddr2(2, 5); MA1__ mAddr3; assert(mAddr1.isValid()); assert(!mAddr3.isValid()); assert(mAddr1 != mAddr2); MA2__ mAddr1Copy = mAddr1; assert(mAddr1Copy == mAddr1); MA2__ mAddr1Assigned; mAddr1Assigned = mAddr1; assert(mAddr1Assigned == mAddr1); assert(mAddr2 < mAddr1); assert(mAddr1 > mAddr2); assert(mAddr2 <= mAddr1); assert(mAddr1 >= mAddr2); assert(mAddr1 <= mAddr1); assert(mAddr2 >= mAddr2); } int main(int argc, char **argv) { typedef kaleidoscope::MatrixAddr<7, 14> MA1; typedef kaleidoscope::MatrixAddrCompressed<7, 14> MA2; typedef kaleidoscope::MatrixAddrCompressed<7, 8> MA3; testIndexedAccess<MA1>(); testIndexedAccess<MA2>(); testRelation<MA1, MA1>(); testRelation<MA2, MA2>(); testRelation<MA1, MA2>(); testRelation<MA2, MA1>(); testRelation<MA3, MA3>(); testRelation<MA3, MA1>(); testRelation<MA1, MA3>(); }