void funclike(void) { #define stringify(x) #x expect_string("5", stringify(5)); expect_string("x", stringify(x)); expect_string("x y", stringify(x y)); expect_string("x y", stringify( x y )); expect_string("x + y", stringify( x + y )); expect_string("x + y", stringify(/**/x/**/+/**//**/ /**/y/**/)); expect_string("x+y", stringify( x+y )); expect_string("'a'", stringify('a')); expect_string("'\\''", stringify('\'')); expect_string("\"abc\"", stringify("abc")); expect_string("ZERO", stringify(ZERO)); #define m1(x) x expect(5, m1(5)); expect(7, m1((5 + 2))); expect(8, m1(plus(5, 3))); expect(10, m1() 10); expect(14, m1(2 + 2 +) 10); #define m2(x) x + x expect(10, m2(5)); #define m3(x, y) x * y expect(50, m3(5, 10)); expect(11, m3(2 + 2, 3 + 3)); #define m4(x, y) x + y + TWO expect(17, m4(5, 10)); #define m6(x, ...) x + __VA_ARGS__ expect(20, m6(2, 18)); expect(25, plus(m6(2, 18, 5))); #define plus(x, y) x * y + plus(x, y) expect(11, plus(2, 3)); #undef plus #define plus(x, y) minus(x, y) #define minus(x, y) plus(x, y) expect(31, plus(30, 1)); expect(29, minus(30, 1)); // This is not a function-like macro. #define m7 (0) + 1 expect(1, m7); #define m8(x, y) x ## y expect(2, m8(TW, O)); expect(0, m8(ZERO,)); #define m9(x, y, z) x y + z expect(8, m9(1,, 7)); #define m10(x) x ## x expect_string("a", "a" m10()); #define hash_hash # ## # #define mkstr(a) # a #define in_between(a) mkstr(a) #define join(c, d) in_between(c hash_hash d) expect_string("x ## y", join(x, y)); int m14 = 67; #define m14(x) x expect(67, m14); expect(67, m14(m14)); int a = 68; #define glue(x, y) x ## y glue(a+, +); expect(69, a); #define identity(x) stringify(x) expect_string("aa A B aa C", identity(m10(a) A B m10(a) C)); #define identity2(x) stringify(z ## x) expect_string("zA aa A B aa C", identity2(A m10(a) A B m10(a) C)); #define m15(x) x x expect_string("a a", identity(m15(a))); #define m16(x) (x,x) expect_string("(a,a)", identity(m16(a))); }
void MatrixTest::test_constructor(void) { message += "test_constructor\n"; std::string file_name = "../data/matrix.dat"; // Default Matrix<size_t> m1; assert_true(m1.get_rows_number() == 0, LOG); assert_true(m1.get_columns_number() == 0, LOG); // Rows and columns numbers Matrix<size_t> m2(0, 0); assert_true(m2.get_rows_number() == 0, LOG); assert_true(m2.get_columns_number() == 0, LOG); Matrix<double> m3(1, 1, 1.0); assert_true(m3.get_rows_number() == 1, LOG); assert_true(m3.get_columns_number() == 1, LOG); // Rows and columns numbers and initialization Matrix<size_t> m4(0, 0, 1); assert_true(m4.get_rows_number() == 0, LOG); assert_true(m4.get_columns_number() == 0, LOG); Matrix<size_t> m5(1, 1, 1); assert_true(m5.get_rows_number() == 1, LOG); assert_true(m5.get_columns_number() == 1, LOG); assert_true(m5 == true, LOG); // File constructor m1.save(file_name); Matrix<size_t> m6(file_name); assert_true(m6.get_rows_number() == 0, LOG); assert_true(m6.get_columns_number() == 0, LOG); m2.save(file_name); Matrix<size_t> m7(file_name); assert_true(m7.get_rows_number() == 0, LOG); assert_true(m7.get_columns_number() == 0, LOG); m3.save(file_name); Matrix<double> m8(file_name); assert_true(m8.get_rows_number() == 1, LOG); assert_true(m8.get_columns_number() == 1, LOG); m4.save(file_name); Matrix<size_t> m9(file_name); assert_true(m9.get_rows_number() == 0, LOG); assert_true(m9.get_columns_number() == 0, LOG); m5.save(file_name); Matrix<size_t> m10(file_name); assert_true(m10.get_rows_number() == 1, LOG); assert_true(m10.get_columns_number() == 1, LOG); assert_true(m10 == true, LOG); // Copy constructor Matrix<double> a5; Matrix<double> b5(a5); assert_true(b5.get_rows_number() == 0, LOG); assert_true(b5.get_columns_number() == 0, LOG); Matrix<size_t> a6(1, 1, true); Matrix<size_t> b6(a6); assert_true(b6.get_rows_number() == 1, LOG); assert_true(b6.get_columns_number() == 1, LOG); assert_true(b6 == true, LOG); // Operator ++ Matrix<size_t> m11(2, 2, 0); m11(0,0)++; m11(1,1)++; assert_true(m11(0,0) == 1, LOG); assert_true(m11(0,1) == 0, LOG); assert_true(m11(1,0) == 0, LOG); assert_true(m11(1,1) == 1, LOG); }