1e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans#define ASSERT_BUFSIZE 256 2e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans 3b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_cmp(t, a, b, cmp, neg_cmp, pri, ...) do { \ 42a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans t a_ = (a); \ 52a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans t b_ = (b); \ 62a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans if (!(a_ cmp b_)) { \ 7e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char prefix[ASSERT_BUFSIZE]; \ 8e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char message[ASSERT_BUFSIZE]; \ 9e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans malloc_snprintf(prefix, sizeof(prefix), \ 102a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "%s:%s:%d: Failed assertion: " \ 112a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "(%s) "#cmp" (%s) --> " \ 122a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "%"pri" "#neg_cmp" %"pri": ", \ 132a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans __func__, __FILE__, __LINE__, \ 14e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans #a, #b, a_, b_); \ 15b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey malloc_snprintf(message, sizeof(message), __VA_ARGS__); \ 16e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans p_test_fail(prefix, message); \ 172a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans } \ 182a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans} while (0) 192a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 20b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ptr_eq(a, b, ...) assert_cmp(void *, a, b, ==, \ 21b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, "p", __VA_ARGS__) 22b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ptr_ne(a, b, ...) assert_cmp(void *, a, b, !=, \ 23b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, "p", __VA_ARGS__) 24b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ptr_null(a, ...) assert_cmp(void *, a, NULL, ==, \ 25b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, "p", __VA_ARGS__) 26b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ptr_not_null(a, ...) assert_cmp(void *, a, NULL, !=, \ 27b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, "p", __VA_ARGS__) 282a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 29b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_c_eq(a, b, ...) assert_cmp(char, a, b, ==, !=, "c", __VA_ARGS__) 30b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_c_ne(a, b, ...) assert_cmp(char, a, b, !=, ==, "c", __VA_ARGS__) 31b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_c_lt(a, b, ...) assert_cmp(char, a, b, <, >=, "c", __VA_ARGS__) 32b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_c_le(a, b, ...) assert_cmp(char, a, b, <=, >, "c", __VA_ARGS__) 33b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_c_ge(a, b, ...) assert_cmp(char, a, b, >=, <, "c", __VA_ARGS__) 34b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_c_gt(a, b, ...) assert_cmp(char, a, b, >, <=, "c", __VA_ARGS__) 352a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 36b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_x_eq(a, b, ...) assert_cmp(int, a, b, ==, !=, "#x", __VA_ARGS__) 37b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_x_ne(a, b, ...) assert_cmp(int, a, b, !=, ==, "#x", __VA_ARGS__) 38b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_x_lt(a, b, ...) assert_cmp(int, a, b, <, >=, "#x", __VA_ARGS__) 39b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_x_le(a, b, ...) assert_cmp(int, a, b, <=, >, "#x", __VA_ARGS__) 40b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_x_ge(a, b, ...) assert_cmp(int, a, b, >=, <, "#x", __VA_ARGS__) 41b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_x_gt(a, b, ...) assert_cmp(int, a, b, >, <=, "#x", __VA_ARGS__) 422a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 43b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d_eq(a, b, ...) assert_cmp(int, a, b, ==, !=, "d", __VA_ARGS__) 44b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d_ne(a, b, ...) assert_cmp(int, a, b, !=, ==, "d", __VA_ARGS__) 45b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d_lt(a, b, ...) assert_cmp(int, a, b, <, >=, "d", __VA_ARGS__) 46b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d_le(a, b, ...) assert_cmp(int, a, b, <=, >, "d", __VA_ARGS__) 47b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d_ge(a, b, ...) assert_cmp(int, a, b, >=, <, "d", __VA_ARGS__) 48b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d_gt(a, b, ...) assert_cmp(int, a, b, >, <=, "d", __VA_ARGS__) 492a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 50b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u_eq(a, b, ...) assert_cmp(int, a, b, ==, !=, "u", __VA_ARGS__) 51b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u_ne(a, b, ...) assert_cmp(int, a, b, !=, ==, "u", __VA_ARGS__) 52b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u_lt(a, b, ...) assert_cmp(int, a, b, <, >=, "u", __VA_ARGS__) 53b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u_le(a, b, ...) assert_cmp(int, a, b, <=, >, "u", __VA_ARGS__) 54b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u_ge(a, b, ...) assert_cmp(int, a, b, >=, <, "u", __VA_ARGS__) 55b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u_gt(a, b, ...) assert_cmp(int, a, b, >, <=, "u", __VA_ARGS__) 562a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 57b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ld_eq(a, b, ...) assert_cmp(long, a, b, ==, \ 58b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, "ld", __VA_ARGS__) 59b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ld_ne(a, b, ...) assert_cmp(long, a, b, !=, \ 60b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, "ld", __VA_ARGS__) 61b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ld_lt(a, b, ...) assert_cmp(long, a, b, <, \ 62b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, "ld", __VA_ARGS__) 63b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ld_le(a, b, ...) assert_cmp(long, a, b, <=, \ 64b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, "ld", __VA_ARGS__) 65b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ld_ge(a, b, ...) assert_cmp(long, a, b, >=, \ 66b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, "ld", __VA_ARGS__) 67b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ld_gt(a, b, ...) assert_cmp(long, a, b, >, \ 68b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, "ld", __VA_ARGS__) 69e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans 70b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_lu_eq(a, b, ...) assert_cmp(unsigned long, \ 71b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, ==, !=, "lu", __VA_ARGS__) 72b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_lu_ne(a, b, ...) assert_cmp(unsigned long, \ 73b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, !=, ==, "lu", __VA_ARGS__) 74b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_lu_lt(a, b, ...) assert_cmp(unsigned long, \ 75b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, <, >=, "lu", __VA_ARGS__) 76b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_lu_le(a, b, ...) assert_cmp(unsigned long, \ 77b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, <=, >, "lu", __VA_ARGS__) 78b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_lu_ge(a, b, ...) assert_cmp(unsigned long, \ 79b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, >=, <, "lu", __VA_ARGS__) 80b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_lu_gt(a, b, ...) assert_cmp(unsigned long, \ 81b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, >, <=, "lu", __VA_ARGS__) 82e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans 83b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qd_eq(a, b, ...) assert_cmp(long long, a, b, ==, \ 84b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, "qd", __VA_ARGS__) 85b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qd_ne(a, b, ...) assert_cmp(long long, a, b, !=, \ 86b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, "qd", __VA_ARGS__) 87b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qd_lt(a, b, ...) assert_cmp(long long, a, b, <, \ 88b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, "qd", __VA_ARGS__) 89b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qd_le(a, b, ...) assert_cmp(long long, a, b, <=, \ 90b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, "qd", __VA_ARGS__) 91b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qd_ge(a, b, ...) assert_cmp(long long, a, b, >=, \ 92b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, "qd", __VA_ARGS__) 93b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qd_gt(a, b, ...) assert_cmp(long long, a, b, >, \ 94b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, "qd", __VA_ARGS__) 95e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans 96b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qu_eq(a, b, ...) assert_cmp(unsigned long long, \ 97b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, ==, !=, "qu", __VA_ARGS__) 98b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qu_ne(a, b, ...) assert_cmp(unsigned long long, \ 99b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, !=, ==, "qu", __VA_ARGS__) 100b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qu_lt(a, b, ...) assert_cmp(unsigned long long, \ 101b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, <, >=, "qu", __VA_ARGS__) 102b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qu_le(a, b, ...) assert_cmp(unsigned long long, \ 103b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, <=, >, "qu", __VA_ARGS__) 104b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qu_ge(a, b, ...) assert_cmp(unsigned long long, \ 105b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, >=, <, "qu", __VA_ARGS__) 106b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_qu_gt(a, b, ...) assert_cmp(unsigned long long, \ 107b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey a, b, >, <=, "qu", __VA_ARGS__) 108e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans 109b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_jd_eq(a, b, ...) assert_cmp(intmax_t, a, b, ==, \ 110b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, "jd", __VA_ARGS__) 111b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_jd_ne(a, b, ...) assert_cmp(intmax_t, a, b, !=, \ 112b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, "jd", __VA_ARGS__) 113b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_jd_lt(a, b, ...) assert_cmp(intmax_t, a, b, <, \ 114b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, "jd", __VA_ARGS__) 115b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_jd_le(a, b, ...) assert_cmp(intmax_t, a, b, <=, \ 116b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, "jd", __VA_ARGS__) 117b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_jd_ge(a, b, ...) assert_cmp(intmax_t, a, b, >=, \ 118b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, "jd", __VA_ARGS__) 119b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_jd_gt(a, b, ...) assert_cmp(intmax_t, a, b, >, \ 120b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, "jd", __VA_ARGS__) 121e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans 122b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ju_eq(a, b, ...) assert_cmp(uintmax_t, a, b, ==, \ 123b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, "ju", __VA_ARGS__) 124b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ju_ne(a, b, ...) assert_cmp(uintmax_t, a, b, !=, \ 125b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, "ju", __VA_ARGS__) 126b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ju_lt(a, b, ...) assert_cmp(uintmax_t, a, b, <, \ 127b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, "ju", __VA_ARGS__) 128b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ju_le(a, b, ...) assert_cmp(uintmax_t, a, b, <=, \ 129b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, "ju", __VA_ARGS__) 130b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ju_ge(a, b, ...) assert_cmp(uintmax_t, a, b, >=, \ 131b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, "ju", __VA_ARGS__) 132b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_ju_gt(a, b, ...) assert_cmp(uintmax_t, a, b, >, \ 133b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, "ju", __VA_ARGS__) 134e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans 135b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zd_eq(a, b, ...) assert_cmp(ssize_t, a, b, ==, \ 136b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, "zd", __VA_ARGS__) 137b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zd_ne(a, b, ...) assert_cmp(ssize_t, a, b, !=, \ 138b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, "zd", __VA_ARGS__) 139b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zd_lt(a, b, ...) assert_cmp(ssize_t, a, b, <, \ 140b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, "zd", __VA_ARGS__) 141b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zd_le(a, b, ...) assert_cmp(ssize_t, a, b, <=, \ 142b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, "zd", __VA_ARGS__) 143b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zd_ge(a, b, ...) assert_cmp(ssize_t, a, b, >=, \ 144b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, "zd", __VA_ARGS__) 145b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zd_gt(a, b, ...) assert_cmp(ssize_t, a, b, >, \ 146b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, "zd", __VA_ARGS__) 1472a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 148b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zu_eq(a, b, ...) assert_cmp(size_t, a, b, ==, \ 149b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, "zu", __VA_ARGS__) 150b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zu_ne(a, b, ...) assert_cmp(size_t, a, b, !=, \ 151b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, "zu", __VA_ARGS__) 152b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zu_lt(a, b, ...) assert_cmp(size_t, a, b, <, \ 153b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, "zu", __VA_ARGS__) 154b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zu_le(a, b, ...) assert_cmp(size_t, a, b, <=, \ 155b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, "zu", __VA_ARGS__) 156b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zu_ge(a, b, ...) assert_cmp(size_t, a, b, >=, \ 157b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, "zu", __VA_ARGS__) 158b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_zu_gt(a, b, ...) assert_cmp(size_t, a, b, >, \ 159b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, "zu", __VA_ARGS__) 1602a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 161b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d32_eq(a, b, ...) assert_cmp(int32_t, a, b, ==, \ 162b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, PRId32, __VA_ARGS__) 163b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d32_ne(a, b, ...) assert_cmp(int32_t, a, b, !=, \ 164b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, PRId32, __VA_ARGS__) 165b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d32_lt(a, b, ...) assert_cmp(int32_t, a, b, <, \ 166b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, PRId32, __VA_ARGS__) 167b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d32_le(a, b, ...) assert_cmp(int32_t, a, b, <=, \ 168b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, PRId32, __VA_ARGS__) 169b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d32_ge(a, b, ...) assert_cmp(int32_t, a, b, >=, \ 170b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, PRId32, __VA_ARGS__) 171b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d32_gt(a, b, ...) assert_cmp(int32_t, a, b, >, \ 172b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, PRId32, __VA_ARGS__) 17380061b6df0a8bef0cedbd947d74932ff1c2511e8Jason Evans 174b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u32_eq(a, b, ...) assert_cmp(uint32_t, a, b, ==, \ 175b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, PRIu32, __VA_ARGS__) 176b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u32_ne(a, b, ...) assert_cmp(uint32_t, a, b, !=, \ 177b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, PRIu32, __VA_ARGS__) 178b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u32_lt(a, b, ...) assert_cmp(uint32_t, a, b, <, \ 179b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, PRIu32, __VA_ARGS__) 180b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u32_le(a, b, ...) assert_cmp(uint32_t, a, b, <=, \ 181b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, PRIu32, __VA_ARGS__) 182b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u32_ge(a, b, ...) assert_cmp(uint32_t, a, b, >=, \ 183b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, PRIu32, __VA_ARGS__) 184b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u32_gt(a, b, ...) assert_cmp(uint32_t, a, b, >, \ 185b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, PRIu32, __VA_ARGS__) 18680061b6df0a8bef0cedbd947d74932ff1c2511e8Jason Evans 187b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d64_eq(a, b, ...) assert_cmp(int64_t, a, b, ==, \ 188b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, PRId64, __VA_ARGS__) 189b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d64_ne(a, b, ...) assert_cmp(int64_t, a, b, !=, \ 190b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, PRId64, __VA_ARGS__) 191b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d64_lt(a, b, ...) assert_cmp(int64_t, a, b, <, \ 192b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, PRId64, __VA_ARGS__) 193b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d64_le(a, b, ...) assert_cmp(int64_t, a, b, <=, \ 194b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, PRId64, __VA_ARGS__) 195b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d64_ge(a, b, ...) assert_cmp(int64_t, a, b, >=, \ 196b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, PRId64, __VA_ARGS__) 197b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_d64_gt(a, b, ...) assert_cmp(int64_t, a, b, >, \ 198b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, PRId64, __VA_ARGS__) 1992a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 200b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u64_eq(a, b, ...) assert_cmp(uint64_t, a, b, ==, \ 201b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey !=, PRIu64, __VA_ARGS__) 202b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u64_ne(a, b, ...) assert_cmp(uint64_t, a, b, !=, \ 203b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey ==, PRIu64, __VA_ARGS__) 204b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u64_lt(a, b, ...) assert_cmp(uint64_t, a, b, <, \ 205b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >=, PRIu64, __VA_ARGS__) 206b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u64_le(a, b, ...) assert_cmp(uint64_t, a, b, <=, \ 207b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey >, PRIu64, __VA_ARGS__) 208b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u64_ge(a, b, ...) assert_cmp(uint64_t, a, b, >=, \ 209b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <, PRIu64, __VA_ARGS__) 210b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_u64_gt(a, b, ...) assert_cmp(uint64_t, a, b, >, \ 211b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey <=, PRIu64, __VA_ARGS__) 2122a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 213b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_b_eq(a, b, ...) do { \ 2142a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans bool a_ = (a); \ 215de73296d6b56abe70b08654342e136c2612d1dbdJason Evans bool b_ = (b); \ 216de73296d6b56abe70b08654342e136c2612d1dbdJason Evans if (!(a_ == b_)) { \ 217e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char prefix[ASSERT_BUFSIZE]; \ 218e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char message[ASSERT_BUFSIZE]; \ 219e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans malloc_snprintf(prefix, sizeof(prefix), \ 2202a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "%s:%s:%d: Failed assertion: " \ 221de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "(%s) == (%s) --> %s != %s: ", \ 2222a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans __func__, __FILE__, __LINE__, \ 223de73296d6b56abe70b08654342e136c2612d1dbdJason Evans #a, #b, a_ ? "true" : "false", \ 224e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans b_ ? "true" : "false"); \ 225b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey malloc_snprintf(message, sizeof(message), __VA_ARGS__); \ 226e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans p_test_fail(prefix, message); \ 2272a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans } \ 2282a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans} while (0) 229b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_b_ne(a, b, ...) do { \ 2302a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans bool a_ = (a); \ 231de73296d6b56abe70b08654342e136c2612d1dbdJason Evans bool b_ = (b); \ 232de73296d6b56abe70b08654342e136c2612d1dbdJason Evans if (!(a_ != b_)) { \ 233e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char prefix[ASSERT_BUFSIZE]; \ 234e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char message[ASSERT_BUFSIZE]; \ 235e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans malloc_snprintf(prefix, sizeof(prefix), \ 2362a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "%s:%s:%d: Failed assertion: " \ 237de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "(%s) != (%s) --> %s == %s: ", \ 2382a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans __func__, __FILE__, __LINE__, \ 239de73296d6b56abe70b08654342e136c2612d1dbdJason Evans #a, #b, a_ ? "true" : "false", \ 240e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans b_ ? "true" : "false"); \ 241b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey malloc_snprintf(message, sizeof(message), __VA_ARGS__); \ 242e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans p_test_fail(prefix, message); \ 2432a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans } \ 2442a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans} while (0) 245b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_true(a, ...) assert_b_eq(a, true, __VA_ARGS__) 246b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_false(a, ...) assert_b_eq(a, false, __VA_ARGS__) 2472a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 248b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_str_eq(a, b, ...) do { \ 2492a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans if (strcmp((a), (b))) { \ 250e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char prefix[ASSERT_BUFSIZE]; \ 251e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char message[ASSERT_BUFSIZE]; \ 252e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans malloc_snprintf(prefix, sizeof(prefix), \ 2532a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "%s:%s:%d: Failed assertion: " \ 2542a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "(%s) same as (%s) --> " \ 255b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans "\"%s\" differs from \"%s\": ", \ 256e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans __func__, __FILE__, __LINE__, #a, #b, a, b); \ 257b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey malloc_snprintf(message, sizeof(message), __VA_ARGS__); \ 258e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans p_test_fail(prefix, message); \ 2592a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans } \ 2602a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans} while (0) 261b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_str_ne(a, b, ...) do { \ 2622a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans if (!strcmp((a), (b))) { \ 263e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char prefix[ASSERT_BUFSIZE]; \ 264e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char message[ASSERT_BUFSIZE]; \ 265e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans malloc_snprintf(prefix, sizeof(prefix), \ 2662a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "%s:%s:%d: Failed assertion: " \ 2672a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans "(%s) differs from (%s) --> " \ 268b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans "\"%s\" same as \"%s\": ", \ 269e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans __func__, __FILE__, __LINE__, #a, #b, a, b); \ 270b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey malloc_snprintf(message, sizeof(message), __VA_ARGS__); \ 271e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans p_test_fail(prefix, message); \ 2722a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans } \ 2732a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans} while (0) 2742a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 275b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define assert_not_reached(...) do { \ 276e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char prefix[ASSERT_BUFSIZE]; \ 277e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans char message[ASSERT_BUFSIZE]; \ 278e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans malloc_snprintf(prefix, sizeof(prefix), \ 279e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans "%s:%s:%d: Unreachable code reached: ", \ 280e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans __func__, __FILE__, __LINE__); \ 281b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey malloc_snprintf(message, sizeof(message), __VA_ARGS__); \ 282e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evans p_test_fail(prefix, message); \ 283e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans} while (0) 284e18c25d23de0e845f0ee7e11d02c1be044738a3cJason Evans 2852a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans/* 2862a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans * If this enum changes, corresponding changes in test/test.sh.in are also 2872a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans * necessary. 2882a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans */ 2892a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evanstypedef enum { 2902a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans test_status_pass = 0, 2912a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans test_status_skip = 1, 2922a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans test_status_fail = 2, 2932a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 2942a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans test_status_count = 3 2952a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans} test_status_t; 2962a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 2972a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evanstypedef void (test_t)(void); 2982a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 2992a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans#define TEST_BEGIN(f) \ 3002a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evansstatic void \ 3012a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evansf(void) \ 3022a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans{ \ 3032a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans p_test_init(#f); 3042a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 3052a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans#define TEST_END \ 3060d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans goto label_test_end; \ 3070d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evanslabel_test_end: \ 3082a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans p_test_fini(); \ 3092a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans} 3102a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 311b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey#define test(...) \ 312b105e65e3ceb60def3908aa2945f94011d61e3fdMike Hommey p_test(__VA_ARGS__, NULL) 3132a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 3140d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans#define test_skip_if(e) do { \ 3150d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans if (e) { \ 3160d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans test_skip("%s:%s:%d: Test skipped: (%s)", \ 3170d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans __func__, __FILE__, __LINE__, #e); \ 3180d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans goto label_test_end; \ 3190d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans } \ 3200d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans} while (0) 3210d6c5d8bd0d866a0ce4ce321259cec65d6459821Jason Evans 32286abd0dcd8e478759fe409d338d11558c4cec427Jason Evansvoid test_skip(const char *format, ...) JEMALLOC_ATTR(format(printf, 1, 2)); 3232a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evansvoid test_fail(const char *format, ...) JEMALLOC_ATTR(format(printf, 1, 2)); 3242a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans 3252a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evans/* For private use by macros. */ 3268888fdb946de0fff946f6a27ded0f54b06bdc51fJason Evanstest_status_t p_test(test_t *t, ...); 3272a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evansvoid p_test_init(const char *name); 3282a83ed0284e92c7ba4bd4efe9df149ac724b2f26Jason Evansvoid p_test_fini(void); 329e3f27cfced57ac9c3b5306947d37411479a68c2eJason Evansvoid p_test_fail(const char *prefix, const char *message); 330