文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ANSI C auto unit test

ANSI C auto unit test

时间:2010-09-07  来源:slimzhao


/* Initializer/finalizer sample for MSVC and GCC.
   2010 Joe Lowe. Released into the public domain.
   */

#include <stdio.h>
#include <string.h>

#ifdef _MSC_VER

#define CCALL __cdecl
#pragma section(".CRT$XCU",read)
#define INITIALIZER(f) \
   static void __cdecl f(void); \
   __declspec(allocate(".CRT$XCU")) void (__cdecl* EXP_LINE(f,_) )(void) = f; \
   static void __cdecl f(void)

#elif defined(__GNUC__)

#define CCALL
#define INITIALIZER(f) \
   static void f(void) __attribute__((constructor));\
   static void f(void)

#endif

typedef void (*UnitTest_FP)(void);

struct  {
    const char * name;
    UnitTest_FP fp;
} static s_all_unit_tests[100];

static void register_unit_test(const char * name, UnitTest_FP fp)
{
    static int test_idx = 0;
    s_all_unit_tests[test_idx].name = name;
    s_all_unit_tests[test_idx].fp = fp;
    test_idx ++;
}

#define EXP_LINE(a, l) a##l
#define CONCAT(a, b) EXP_LINE(a,b)
#define UNIT_TEST(a)  static void a(void);\
    INITIALIZER( CONCAT(reg_##a, __LINE__))      \
    {                                     \
        register_unit_test(#a, a);        \
    }                                     \
    void a(void)

static void CCALL finalize(void)
{
   printf("finalize\n");
}

UNIT_TEST(my_test_1)
{
   printf( "calling \n");
}

UNIT_TEST(my_test_2)
{
   printf( "calling \n");
}

int CCALL main(int argc,const char*const* argv)
{
    int i = 0;
    for(; i < sizeof(s_all_unit_tests) / sizeof(s_all_unit_tests[0]); ++i)
    {
        if(!s_all_unit_tests[i]. name) break;
       printf("function: %s\n",  s_all_unit_tests[i].name );
       (*s_all_unit_tests[i].fp) ();
    }
   return 0;
}

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载