%PDF- %PDF-
Direktori : /usr/include/node/asserts-cpp/ |
Current File : //usr/include/node/asserts-cpp/asserts.h |
#ifndef ASSERTS_H_ #define ASSERTS_H_ #include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /* Have our own assert, so we are sure it does not get optimized away in * a release build. */ #define ASSERT(expr) \ do { \ if (!(expr)) { \ fprintf(stderr, \ "Assertion failed in %s on line %d: %s\n", \ __FILE__, \ __LINE__, \ #expr); \ abort(); \ } \ } while (0) #define ASSERT_BASE(expr, a, operator, b, type, conv) \ do { \ if (!(expr)) { \ fprintf(stderr, \ "Assertion failed in %s on line %d: `%s %s %s` " \ "(%" conv " %s %" conv ")\n", \ __FILE__, \ __LINE__, \ #a, \ #operator, \ #b, \ (type)a, \ #operator, \ (type)b); \ abort(); \ } \ } while (0) #define ASSERT_BASE_LEN(expr, a, operator, b, conv, len) \ do { \ if (!(expr)) { \ fprintf(stderr, \ "Assertion failed in %s on line %d: `%s %s %s` " \ "(%.*"#conv" %s %.*"#conv")\n", \ __FILE__, \ __LINE__, \ #a, \ #operator, \ #b, \ static_cast<int>(len), \ a, \ #operator, \ static_cast<int>(len), \ b); \ abort(); \ } \ } while (0) #define ASSERT_BASE_HEX(expr, a, operator, b, size) \ do { \ if (!(expr)) { \ int i; \ unsigned char* a_ = (unsigned char*)a; \ unsigned char* b_ = (unsigned char*)b; \ fprintf(stderr, \ "Assertion failed in %s on line %d: `%s %s %s` (", \ __FILE__, \ __LINE__, \ #a, \ # \ operator, \ #b); \ for (i = 0; i < size; ++i) { \ if (i > 0) \ fprintf(stderr, ":"); \ fprintf(stderr, "%02X", a_[i]); \ } \ fprintf(stderr, " %s ", #operator); \ for (i = 0; i < size; ++i) { \ if (i > 0) \ fprintf(stderr, ":"); \ fprintf(stderr, "%02X", b_[i]); \ } \ fprintf(stderr, ")\n"); \ abort(); \ } \ } while (0) #define ASSERT_INT_BASE(a, operator, b, type, conv) \ ASSERT_BASE(a operator b, a, operator, b, type, conv) #define ASSERT_EQ(a, b) ASSERT_INT_BASE(a, ==, b, int64_t, PRId64) #define ASSERT_GE(a, b) ASSERT_INT_BASE(a, >=, b, int64_t, PRId64) #define ASSERT_GT(a, b) ASSERT_INT_BASE(a, >, b, int64_t, PRId64) #define ASSERT_LE(a, b) ASSERT_INT_BASE(a, <=, b, int64_t, PRId64) #define ASSERT_LT(a, b) ASSERT_INT_BASE(a, <, b, int64_t, PRId64) #define ASSERT_NE(a, b) ASSERT_INT_BASE(a, !=, b, int64_t, PRId64) #define ASSERT_UINT64_EQ(a, b) ASSERT_INT_BASE(a, ==, b, uint64_t, PRIu64) #define ASSERT_UINT64_GE(a, b) ASSERT_INT_BASE(a, >=, b, uint64_t, PRIu64) #define ASSERT_UINT64_GT(a, b) ASSERT_INT_BASE(a, >, b, uint64_t, PRIu64) #define ASSERT_UINT64_LE(a, b) ASSERT_INT_BASE(a, <=, b, uint64_t, PRIu64) #define ASSERT_UINT64_LT(a, b) ASSERT_INT_BASE(a, <, b, uint64_t, PRIu64) #define ASSERT_UINT64_NE(a, b) ASSERT_INT_BASE(a, !=, b, uint64_t, PRIu64) #define ASSERT_STR_EQ(a, b) ASSERT_BASE(strcmp(a, b) == 0, a, ==, b, char*, "s") #define ASSERT_STR_NE(a, b) ASSERT_BASE(strcmp(a, b) != 0, a, !=, b, char*, "s") #define ASSERT_MEM_EQ(a, b, size) \ ASSERT_BASE_LEN(memcmp(a, b, size) == 0, a, ==, b, s, size) #define ASSERT_MEM_NE(a, b, size) \ ASSERT_BASE_LEN(memcmp(a, b, size) != 0, a, !=, b, s, size) #define ASSERT_MEM_HEX_EQ(a, b, size) \ ASSERT_BASE_HEX(memcmp(a, b, size) == 0, a, ==, b, size) #define ASSERT_MEM_HEX_NE(a, b, size) \ ASSERT_BASE_HEX(memcmp(a, b, size) != 0, a, !=, b, size) #define ASSERT_NULL(a) ASSERT_BASE(a == nullptr, a, ==, nullptr, void*, "p") #define ASSERT_NOT_NULL(a) ASSERT_BASE(a != nullptr, a, !=, nullptr, void*, "p") #define ASSERT_PTR_EQ(a, b) \ ASSERT_BASE((void*)a == (void*)b, a, ==, b, void*, "p") #define ASSERT_PTR_NE(a, b) \ ASSERT_BASE((void*)a != (void*)b, a, !=, b, void*, "p") #endif // ASSERTS_H_