| /* |
| |
| * Copyright (c) 2012-2017 The Khronos Group Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef __VX_CT_TEST_H__ |
| #define __VX_CT_TEST_H__ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <math.h> |
| |
| // calc number of arguments - from 1 to 32 |
| #define CT_EXPAND(x) x |
| #define CT_EXPANDN(...) __VA_ARGS__ |
| #define CT_VAARG_NUMS(_32, _31, _30, _29, _28, _27, _26, _25, _24, _23, _22, _21, _20, _19, _18, _17, _16, _15, _14, _13, _12, _11, _10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0, ...) _0 |
| #define CT_VAARG_NUM(...) CT_EXPAND(CT_VAARG_NUMS(__VA_ARGS__, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) |
| |
| // apply macro for every argument |
| #define CT_FOREACH0(OP, ...) CT_EXPAND(OP(__VA_ARGS__)) |
| #define CT_FOREACH1(OP, op_args, x) CT_FOREACH0(OP, x, CT_EXPANDN op_args (x)) |
| #define CT_FOREACH2(OP, op_args, x, y) CT_FOREACH0(OP, x, CT_EXPANDN op_args (x)), CT_FOREACH0(OP, y, CT_EXPANDN op_args (y)) |
| #define CT_FOREACH3(OP, op_args, x, y, z) CT_FOREACH0(OP, x, CT_EXPANDN op_args (x)), CT_FOREACH0(OP, y, CT_EXPANDN op_args (y)), CT_FOREACH0(OP, z, CT_EXPANDN op_args (z)) |
| #define CT_FOREACH4(OP, op_args, x, y, z, p) CT_FOREACH0(OP, x, CT_EXPANDN op_args (x)), CT_FOREACH0(OP, y, CT_EXPANDN op_args (y)), CT_FOREACH0(OP, z, CT_EXPANDN op_args (z)), CT_FOREACH0(OP, p, CT_EXPANDN op_args (p)) |
| #define CT_FOREACH5(OP, op_args, x, y, ...) CT_FOREACH2(OP,op_args,x,y), CT_EXPAND(CT_FOREACH3(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH6(OP, op_args, x, y, z, ...) CT_FOREACH3(OP,op_args,x,y,z), CT_EXPAND(CT_FOREACH3(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH7(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH3(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH8(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH4(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH9(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH5(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH10(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH6(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH11(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH7(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH12(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH8(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH13(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH9(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH14(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH10(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH15(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH11(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH16(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH12(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH17(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH13(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH18(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH14(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH19(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH15(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH20(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH16(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH21(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH17(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH22(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH18(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH23(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH19(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH24(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH20(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH25(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH21(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH26(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH22(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH27(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH23(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH28(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH24(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH29(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH25(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH30(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH26(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH31(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH27(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH32(OP, op_args, x, y, z, p, ...) CT_FOREACH4(OP,op_args,x,y,z,p), CT_EXPAND(CT_FOREACH28(OP,op_args,__VA_ARGS__)) |
| #define CT_FOREACH_HELPER2(OP, op_args, qty, ...) CT_EXPAND(CT_FOREACH##qty(OP, op_args, __VA_ARGS__)) |
| #define CT_FOREACH_HELPER(OP, op_args, qty, ...) CT_FOREACH_HELPER2(OP, op_args, qty, __VA_ARGS__) |
| |
| /* |
| CT_FOREACH - appy macro with single arguments to every element in a list |
| Example: |
| #define SQR(x, ...) ((x)*(x)) |
| int squares[] = {CT_FOREACH(SQR, 0, 1, 2, 3, 4, 5)}; |
| */ |
| #define CT_FOREACH(OP, ...) CT_FOREACH_HELPER(OP, , CT_VAARG_NUM(__VA_ARGS__), __VA_ARGS__) |
| /* |
| CT_FOREACHN - appy macro with multiple arguments to every element in a list |
| Example (comma after 10 is required): |
| #define MULBYN(x, n, ...) ((n)*(x)) |
| int squares[] = {CT_FOREACHN(MULBYN, (10,), 0, 1, 2, 3, 4, 5)}; |
| */ |
| #define CT_FOREACHN(OP, op_args_with_comma, ...) CT_FOREACH_HELPER(OP, op_args_with_comma, CT_VAARG_NUM(__VA_ARGS__), __VA_ARGS__) |
| |
| #ifndef NULL |
| #define NULL ((void*)0) |
| #endif |
| #ifndef M_PI |
| #define M_PI 3.1415926535897932384626433832795 |
| #endif |
| #define M_PIF (vx_float32)M_PI |
| |
| #include "test_utils.h" |
| #include "test_image.h" |
| |
| typedef struct CT_TestCaseEntry* (*CT_RegisterTestCaseFN)(); |
| |
| typedef struct CT_TestEntry* (*CT_TestRegisterFN)(); |
| typedef void (*CT_TestFn)(void* context_, void* arg_); |
| |
| struct CT_TestEntry { |
| struct CT_TestEntry* next_; |
| struct CT_TestCaseEntry* testcase_; |
| CT_TestFn test_fn_; |
| const char* name_; |
| void* args_; |
| int args_count_; |
| int arg_size_; |
| }; |
| |
| typedef void* (*CT_SetupTestCaseFN)(); // create context |
| typedef void (*CT_TeardownTestCaseFN)(void* context); // release context |
| |
| struct CT_TestCaseEntry { |
| struct CT_TestCaseEntry* next_; |
| const char* name_; |
| CT_TestRegisterFN* test_register_fns_; |
| struct CT_TestEntry* tests_; |
| CT_SetupTestCaseFN setupFn_; |
| CT_TeardownTestCaseFN teardownFn_; |
| int test_count_; |
| }; |
| |
| #define CT_ARRAY_DIM(array) (sizeof(array)/sizeof((array)[0])) |
| |
| #define CT_MAKE_TEST_FN(fn, testcase, ...) testcase##__##fn |
| |
| #define CT_TESTCASE(testcase, TypeTestCaseContext, setupTestCaseFn, teardownTestCaseFn) \ |
| typedef TypeTestCaseContext Context_##testcase; \ |
| CT_TestRegisterFN testcase##_Tests[]; \ |
| struct CT_TestCaseEntry testcase##_TestCase = { \ |
| NULL, #testcase, testcase##_Tests, NULL, setupTestCaseFn, teardownTestCaseFn, 0}; \ |
| struct CT_TestCaseEntry* testcase##_register() { return &testcase##_TestCase; } |
| |
| #define CT_TEST(testcase, fn) \ |
| static void testcase##_##fn##_body(Context_##testcase*, void*); \ |
| struct CT_TestEntry testcase##_##fn##_entry = { \ |
| NULL, NULL, (CT_TestFn)testcase##_##fn##_body, #fn, NULL, 0, 0 }; \ |
| struct CT_TestEntry testcase##_##fn##_entry_disabled = { \ |
| NULL, NULL, (CT_TestFn)testcase##_##fn##_body, "DISABLED_" #fn, NULL, 0, 0 }; \ |
| static struct CT_TestEntry* CT_MAKE_TEST_FN(fn, testcase)() \ |
| { return &testcase##_##fn##_entry; } \ |
| static struct CT_TestEntry* CT_MAKE_TEST_FN(DISABLED_##fn, testcase)() \ |
| { return &testcase##_##fn##_entry_disabled; } \ |
| void testcase##_##fn##_body(Context_##testcase* context_, void* nullarg_) |
| |
| #define CT_TEST_WITH_ARG(testcase, fn, ArgType, ...) \ |
| static void testcase##_##fn##_body(Context_##testcase*, ArgType*); \ |
| static ArgType testcase##_##fn##_args[] = { __VA_ARGS__ }; \ |
| static struct CT_TestEntry testcase##_##fn##_entry = { \ |
| NULL, NULL, (CT_TestFn)testcase##_##fn##_body, #fn, \ |
| testcase##_##fn##_args, \ |
| CT_ARRAY_DIM(testcase##_##fn##_args), sizeof(testcase##_##fn##_args[0]) \ |
| }; \ |
| static struct CT_TestEntry* CT_MAKE_TEST_FN(fn, testcase)() \ |
| { return &testcase##_##fn##_entry; } \ |
| static struct CT_TestEntry testcase##_##fn##_entry_disabled = { \ |
| NULL, NULL, (CT_TestFn)testcase##_##fn##_body, "DISABLED_" #fn, \ |
| testcase##_##fn##_args, \ |
| CT_ARRAY_DIM(testcase##_##fn##_args), sizeof(testcase##_##fn##_args[0]) \ |
| }; \ |
| static struct CT_TestEntry* CT_MAKE_TEST_FN(DISABLED_##fn, testcase)() \ |
| { return &testcase##_##fn##_entry_disabled; } \ |
| void testcase##_##fn##_body(Context_##testcase* context_, ArgType* arg_) |
| |
| #define CT_TESTCASE_TESTS(testcase, ...) CT_TestRegisterFN testcase##_Tests[] = { CT_FOREACHN(CT_MAKE_TEST_FN, (testcase,), __VA_ARGS__), NULL }; |
| |
| #define CT_ARG(...) { __VA_ARGS__ } |
| #define ARG_ENUM(val) ARG(#val, val) |
| #define DISABLED_ARG_ENUM(val) ARG("DISABLED_" #val, val) |
| |
| extern char CT_EXTENDED_ARG_BEGIN[]; |
| extern char CT_EXTENDED_ARG_END[]; |
| |
| #define ARG_EXTENDED_BEGIN() CT_ARG(CT_EXTENDED_ARG_BEGIN,) |
| #define ARG_EXTENDED_END() CT_ARG(CT_EXTENDED_ARG_END,) |
| |
| typedef struct CT_VoidContext_ { |
| int dummy; // nothing, just make MSVC happy |
| } CT_VoidContext; |
| |
| struct CT_GlobalContextBlackBox; |
| struct CT_GlobalContext |
| { |
| const char* testname_; |
| uint64_t seed_; |
| const void* arg_; |
| void* user_context_; |
| struct CT_GlobalContextBlackBox* internal_; |
| }; |
| |
| struct CT_GlobalContext* CT(); |
| |
| void CT_RecordFailure(); |
| void CT_RecordFailureAt(const char* message, const char* func, const char* file, const int line); |
| void CT_RecordFailureAtFormat(const char* message, const char* func, const char* file, const int line, ...); |
| int CT_HasFailure(); |
| |
| void CT_DumpMessage(const char* message, ...); |
| |
| typedef void (*CT_ObjectDestructor)(void **); |
| typedef enum CT_GCType { CT_GC_ALL=0, CT_GC_OBJECT=1, CT_GC_IMAGE=2 } CT_GCType; |
| void CT_RegisterForGarbageCollection(void *object, CT_ObjectDestructor collector, CT_GCType type); |
| void CT_CollectGarbage(int type); |
| |
| #define CT_DO_FAIL /* TODO fail */ return |
| #define CT_PASS() return |
| |
| // TODO: possibly use the trick instead of non-standard ##__VA_ARGS__ |
| // http://stackoverflow.com/questions/5588855/standard-alternative-to-gccs-va-args-trick/11172679#11172679 |
| #define CT_FAIL_(ret_error, message, ...) \ |
| do { \ |
| CT_RecordFailureAtFormat(message, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); \ |
| ret_error; \ |
| } while(0) |
| |
| #define CT_FAIL_AT_(ret_error, message, func, file, line, ...) \ |
| do { \ |
| CT_RecordFailureAtFormat(message, func, file, line, ##__VA_ARGS__); \ |
| {ret_error;} \ |
| } while(0) |
| |
| #define CT_ASSERT_IMPL(ret_error, expr, exprStr, func, file, line) \ |
| do { if (!!(expr)) { } else { CT_FAIL_AT_(ret_error, "Assertion: %s", func, file, line, exprStr); } } while (0) |
| |
| #define CT_ADD_FAILURE(message, ...) CT_FAIL_(, message, ##__VA_ARGS__) |
| #define CT_FAIL(message, ...) CT_FAIL_(CT_DO_FAIL, message, ##__VA_ARGS__) |
| #define CT_FAIL_AT(message, func, file, line, ...) CT_FAIL_AT_(CT_DO_FAIL, message, func, file, line, ##__VA_ARGS__) |
| |
| #define CT_ASSERT_AT(expr, func, file, line) CT_ASSERT_IMPL(CT_DO_FAIL, expr, #expr, func, file, line) |
| #define CT_EXPECT_AT(expr, func, file, line) CT_ASSERT_IMPL({}, expr, #expr, func, file, line) |
| #define CT_ASSERT_AT_(ret_error, expr, func, file, line) CT_ASSERT_IMPL(ret_error, expr, #expr, func, file, line) |
| |
| #define CT_ASSERT(expr) CT_ASSERT_IMPL(CT_DO_FAIL, expr, #expr, __FUNCTION__, __FILE__, __LINE__) |
| #define CT_EXPECT(expr) CT_ASSERT_IMPL({}, expr, #expr, __FUNCTION__, __FILE__, __LINE__) |
| #define CT_ASSERT_(ret_error, expr) CT_ASSERT_IMPL(ret_error, expr, #expr, __FUNCTION__, __FILE__, __LINE__) |
| |
| #define CT_ASSERT_NO_FAILURE_IMPL(ret_error, statement, message) \ |
| do { \ |
| int ct_failures_before__ = CT_HasFailure(); \ |
| {statement;} \ |
| if (ct_failures_before__ < CT_HasFailure()) \ |
| { \ |
| CT_DumpMessage("FAILED during execution of statement:\n\t%20s:%d:\n\t\t%s", __FILE__, __LINE__, message); \ |
| {ret_error;} \ |
| } \ |
| } while(0) |
| #define CT_ASSERT_NO_FAILURE(statement) CT_ASSERT_NO_FAILURE_IMPL(CT_DO_FAIL, statement, #statement) |
| #define CT_ASSERT_NO_FAILURE_(ret_error, statement) CT_ASSERT_NO_FAILURE_IMPL(ret_error, statement, #statement) |
| |
| #define ASSERT_EQ_INT(expected, actual) \ |
| do { \ |
| intmax_t s0 = (intmax_t)(expected); \ |
| intmax_t s1 = (intmax_t)(actual); \ |
| if (s0 == s1) {/*passed*/} else \ |
| { \ |
| CT_RecordFailureAtFormat("Expected: %s == %s\n\t" \ |
| "Actual: %lld != %lld" \ |
| , __FUNCTION__, __FILE__, __LINE__, \ |
| #expected, #actual, (long long)s0, (long long)s1); \ |
| {CT_DO_FAIL;} \ |
| } \ |
| }while(0) |
| |
| #define EXPECT_EQ_INT(expected, actual) \ |
| do { \ |
| intmax_t s0 = (intmax_t)(expected); \ |
| intmax_t s1 = (intmax_t)(actual); \ |
| if (s0 == s1) {/*passed*/} else \ |
| { \ |
| CT_RecordFailureAtFormat("Expected: %s == %s\n\t" \ |
| "Actual: %lld != %lld" \ |
| , __FUNCTION__, __FILE__, __LINE__, \ |
| #expected, #actual, (long long)s0, (long long)s1); \ |
| } \ |
| }while(0) |
| |
| #define ASSERT_EQ_PTR(expected, actual) \ |
| do { \ |
| void* s0 = (void*)(expected); \ |
| void* s1 = (void*)(actual); \ |
| if (s0 == s1) {/*passed*/} else \ |
| { \ |
| CT_RecordFailureAtFormat("Expected: %s == %s\n\t" \ |
| "Actual: %p != %p" \ |
| , __FUNCTION__, __FILE__, __LINE__, \ |
| #expected, #actual, s0, s1); \ |
| {CT_DO_FAIL;} \ |
| } \ |
| }while(0) |
| |
| #define EXPECT_EQ_PTR(expected, actual) \ |
| do { \ |
| void* s0 = (void*)(expected); \ |
| void* s1 = (void*)(actual); \ |
| if (s0 == s1) {/*passed*/} else \ |
| { \ |
| CT_RecordFailureAtFormat("Expected: %s == %s\n\t" \ |
| "Actual: %p != %p" \ |
| , __FUNCTION__, __FILE__, __LINE__, \ |
| #expected, #actual, s0, s1); \ |
| } \ |
| }while(0) |
| |
| #define CT_GENERATE_PARAMETERS(testArgName, nextmacro, ...) \ |
| CT_EXPAND(nextmacro(testArgName, __VA_ARGS__)) |
| |
| #define ARG_PUT_0(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/0", __VA_ARGS__, 0)) |
| #define ARG_PUT_1(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/1", __VA_ARGS__, 1)) |
| #define ARG_PUT_2(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/2", __VA_ARGS__, 2)) |
| #define ARG_PUT_3(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/3", __VA_ARGS__, 3)) |
| #define ARG_PUT_4(testArgName, nextmacro, ...) CT_EXPAND(nextmacro(testArgName "/4", __VA_ARGS__, 4)) |
| |
| #define ADD_SIZE_NONE(testArgName, nextmacro, ...) \ |
| CT_EXPAND(nextmacro(testArgName, __VA_ARGS__, 0, 0)) |
| |
| #define ADD_SIZE_SMALL_SET(testArgName, nextmacro, ...) \ |
| CT_EXPAND(nextmacro(testArgName "/sz=16x16", __VA_ARGS__, 16, 16)), \ |
| CT_EXPAND(nextmacro(testArgName "/sz=256x256", __VA_ARGS__, 256, 256)), \ |
| CT_EXPAND(nextmacro(testArgName "/sz=640x480", __VA_ARGS__, 640, 480)) |
| |
| #define ADD_SIZE_16x16(testArgName, nextmacro, ...) \ |
| CT_EXPAND(nextmacro(testArgName "/sz=16x16", __VA_ARGS__, 16, 16)) |
| |
| #define ADD_SIZE_64x64(testArgName, nextmacro, ...) \ |
| CT_EXPAND(nextmacro(testArgName "/sz=64x64", __VA_ARGS__, 64, 64)) |
| |
| #define ADD_SIZE_256x256(testArgName, nextmacro, ...) \ |
| CT_EXPAND(nextmacro(testArgName "/sz=256x256", __VA_ARGS__, 256, 256)) |
| |
| #ifndef CT_DONT_DEFINE_PUBLIC_MACROS |
| |
| #define TESTCASE CT_TESTCASE |
| #define TEST CT_TEST |
| #define ARG CT_ARG |
| #define TEST_WITH_ARG CT_TEST_WITH_ARG |
| #define TESTCASE_TESTS CT_TESTCASE_TESTS |
| |
| #define PASS CT_PASS |
| |
| #define FAIL CT_FAIL |
| #define FAIL_ CT_FAIL_ |
| |
| #define FAIL_AT CT_FAIL_AT |
| #define FAIL_AT_ CT_FAIL_AT_ |
| |
| #define ADD_FAILURE CT_ADD_FAILURE |
| #define ASSERT_NO_FAILURE CT_ASSERT_NO_FAILURE |
| #define ASSERT_NO_FAILURE_ CT_ASSERT_NO_FAILURE_ |
| |
| #define ASSERT CT_ASSERT |
| #define EXPECT CT_EXPECT |
| #define ASSERT_ CT_ASSERT_ |
| |
| #define ASSERT_AT CT_ASSERT_AT |
| #define EXPECT_AT CT_EXPECT_AT |
| #define ASSERT_AT_ CT_ASSERT_AT_ |
| |
| #define CT_Immediate_MODE 0 |
| #define CT_Graph_MODE 1 |
| |
| |
| #if defined(_MSC_VER) |
| #define CT_INLINE _inline |
| #define snprintf(buf, sz, pattern, ...) _snprintf_s(buf, sz, _TRUNCATE, pattern, __VA_ARGS__) |
| #else |
| #define CT_INLINE inline |
| #endif |
| |
| #endif |
| |
| #endif // __VX_CT_TEST_H__ |