Hi, Sergey! Thanks for the patch! LGTM.   > >diff --git a/test/tarantool-c-tests/test.h b/test/tarantool-c-tests/test.h >new file mode 100644 >index 00000000..28df9daf >--- /dev/null >+++ b/test/tarantool-c-tests/test.h >@@ -0,0 +1,217 @@ Looks so much better now! >+#define LOCATION_FMT "location:\t%s:%d\n" >+#define ASSERT_NAME_FMT(name) "failed_assertion:\t" #name "\n" >+#define ASSERT_EQUAL_FMT(name_type, type_fmt) \ >+ LOCATION_FMT \ >+ ASSERT_NAME_FMT(assert_ ## name_type ## _equal) \ >+ "got: " type_fmt "\n" \ >+ "expected: " type_fmt "\n" >+ >+#define ASSERT_NOT_EQUAL_FMT(type_fmt) \ >+ LOCATION_FMT \ >+ ASSERT_NAME_FMT(assert_ ## name_type ## _not_equal) \ >+ "got: " type_fmt "\n" \ >+ "unexpected: " type_fmt "\n" >+ >+#define assert_true(cond) do { \ >+ if (!(cond)) { \ >+ test_save_diag_data(LOCATION_FMT \ >+ "condition_failed:\t'" #cond "'\n", \ >+ __FILE__, __LINE__); \ >+ _test_exit(TEST_LJMP_EXIT_FAILURE); \ >+ } \ >+} while (0) >+ >+#define assert_false(cond) assert_true(!(cond)) >+ >+#define assert_general(cond, fmt, ...) do { \ >+ if (!(cond)) { \ >+ test_save_diag_data(fmt, __VA_ARGS__); \ >+ _test_exit(TEST_LJMP_EXIT_FAILURE); \ >+ } \ >+} while (0) >+ >+#define assert_ptr_equal(got, expected) do { \ >+ assert_general((got) == (expected), \ >+ ASSERT_EQUAL_FMT(ptr, "%p"), \ >+ __FILE__, __LINE__, (got), (expected) \ >+ ); \ >+} while (0) >+ >+#define assert_ptr_not_equal(got, unexpected) do { \ >+ assert_general((got) != (unexpected), \ >+ ASSERT_NOT_EQUAL_FMT(ptr, "%p"), \ >+ __FILE__, __LINE__, (got), (unexpected) \ >+ ); \ >+} while (0) >+ >+ >+#define assert_int_equal(got, expected) do { \ >+ assert_general((got) == (expected), \ >+ ASSERT_EQUAL_FMT(int, "%d"), \ >+ __FILE__, __LINE__, (got), (expected) \ >+ ); \ >+} while (0) >+ >+#define assert_int_not_equal(got, unexpected) do { \ >+ assert_general((got) != (unexpected), \ >+ ASSERT_NOT_EQUAL_FMT(int, "%d"), \ >+ __FILE__, __LINE__, (got), (unexpected) \ >+ ); \ >+} while (0) >+ >+#define assert_sizet_equal(got, expected) do { \ >+ assert_general((got) == (expected), \ >+ ASSERT_EQUAL_FMT(sizet, "%lu"), \ >+ __FILE__, __LINE__, (got), (expected) \ >+ ); \ >+} while (0) >+ >+#define assert_sizet_not_equal(got, unexpected) do { \ >+ assert_general((got) != (unexpected), \ >+ ASSERT_NOT_EQUAL_FMT(sizet, "%lu"), \ >+ __FILE__, __LINE__, (got), (unexpected) \ >+ ); \ >+} while (0) >+ >+/* Check that doubles are __exactly__ the same. */ >+#define assert_double_equal(got, expected) do { \ >+ assert_general((got) == (expected), \ >+ ASSERT_EQUAL_FMT(double, "%lf"), \ >+ __FILE__, __LINE__, (got), (expected) \ >+ ); \ >+} while (0) >+ >+/* Check that doubles are not __exactly__ the same. */ >+#define assert_double_not_equal(got, unexpected) do { \ >+ assert_general((got) != (unexpected), \ >+ ASSERT_NOT_EQUAL_FMT(double, "%lf"), \ >+ __FILE__, __LINE__, (got), (unexpected) \ >+ ); \ >+} while (0) >+ >+#endif /* TEST_H */ >-- >2.34.1 -- Best regards, Maxim Kokryashkin