From 736fc3232fa8b23450328afa7c60b831f7397688 Mon Sep 17 00:00:00 2001 From: fanasina Date: Wed, 18 Oct 2023 00:29:32 +0200 Subject: [PATCH] add debug and gtest hook like as option --- include_ytest/include/fmock/fmock.h | 20 ++-- include_ytest/include/ftest/ftest.h | 87 ++++++++--------- include_ytest/include/tools_t/tools_t.h | 3 +- libytest.so | Bin 173280 -> 294880 bytes yfmock/include/fmock/fmock.h | 20 ++-- yfmock/src/fmock/fmock.c | 10 +- yftest/include/ftest/ftest.h | 87 ++++++++--------- yftest/src/ftest/ftest.c | 85 ++++++++++------- ytools_t/include/tools_t/tools_t.h | 3 +- ytools_t/src/tools_t/tools_t.c | 10 +- ytools_t/src/tools_t/tools_t.h | 119 ------------------------ 11 files changed, 173 insertions(+), 271 deletions(-) delete mode 100644 ytools_t/src/tools_t/tools_t.h diff --git a/include_ytest/include/fmock/fmock.h b/include_ytest/include/fmock/fmock.h index 7ef12c0..f6728e4 100644 --- a/include_ytest/include/fmock/fmock.h +++ b/include_ytest/include/fmock/fmock.h @@ -108,16 +108,16 @@ extern struct list_base_fmock *g_list_base_fmock; PRINT_DEBUG(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>count call of %s: %ld\n",#namefunction,count_call_f);\ struct list_mock_return_ ## namefunction *tmp_mock = &list_mo_ ## namefunction;\ if( (tmp_mock->info_mock)->times_left == INITSTATE ){\ - PRINT_HK_C(colors_f[k_YELLOW],HK_TR," WARNING, %s, no EXPECT_MOCK_CALL or WILL_MOCK_CALL, but called %ld times.\n",#namefunction, count_call_f);\ + PRINT_HK_C(colors_f[k_YELLOW],tab_hk_f[hk_TR]," WARNING, %s, no EXPECT_MOCK_CALL or WILL_MOCK_CALL, but called %ld times.\n",#namefunction, count_call_f);\ if(count_call_f==1){\ - PRINT_HK_C(colors_f[k_YELLOW],HK_TR," For instance:\n"\ + PRINT_HK_C(colors_f[k_YELLOW],tab_hk_f[hk_TR]," For instance:\n"\ "%s EXPECT_MOCK_CALL(%s,%s,%s,true,1){\n"\ "%s\t %s ret;\n%s \t ...do something with %s;\n"\ "%s\t return ret;\n"\ "%s }\n"\ "%s if call once and accept all args, the same args with WILL_MOCK_CALL \n\n",\ - HK_TR, #returntype, #namefunction,#args_prototype_with_parenthesis, HK_TR,#returntype, \ - HK_TR, #args_call_with_parenthesis, HK_TR, HK_TR, HK_TR ); \ + tab_hk_f[hk_TR], #returntype, #namefunction,#args_prototype_with_parenthesis, tab_hk_f[hk_TR],#returntype, \ + tab_hk_f[hk_TR], #args_call_with_parenthesis, tab_hk_f[hk_TR], tab_hk_f[hk_TR], tab_hk_f[hk_TR] ); \ /*return (returntype)0;*/ \ INIT_MOCK_INFO_IF_NO_(tmp_mock,namefunction, PRE_ID);\ }/* to have log */\ @@ -129,15 +129,15 @@ extern struct list_base_fmock *g_list_base_fmock; append_variable_current(&((tmp_mock->info_mock)->l_current_var), tmp_mock->str_print_current_variables args_call_with_parenthesis);\ }\ else if(count_call_f == 1){\ - PRINT_HK_C(colors_f[k_YELLOW],HK_TR," no printer variable function defined, to define it:\n"\ + PRINT_HK_C(colors_f[k_YELLOW],tab_hk_f[hk_TR]," no printer variable function defined, to define it:\n"\ "%s STR_PRINT_CUR_VAR(%s,%s,%s){\n"\ "%s\t char* ret=malloc(256);/*for instance*/;\n"\ "%s\t ... sprintf(ret,...., %s);/*for instance*/ \n"\ "%s\t return ret;\n"\ "%s }\n"\ "%s same prototype as MOCK_FUNC whithout returntype which always char* i\n\n",\ - HK_TR, #namefunction,#args_prototype_with_parenthesis, #args_call_with_parenthesis, \ - HK_TR, HK_TR, #args_call_with_parenthesis, HK_TR, HK_TR, HK_TR ); \ + tab_hk_f[hk_TR], #namefunction,#args_prototype_with_parenthesis, #args_call_with_parenthesis, \ + tab_hk_f[hk_TR], tab_hk_f[hk_TR], #args_call_with_parenthesis, tab_hk_f[hk_TR], tab_hk_f[hk_TR], tab_hk_f[hk_TR] ); \ }\ /*LOG("condition_func:%d\n", tmp_mock->call_mock_condition args_call_with_parenthesis);*/ /*LOG("%s\n","failure condition");*/\ /*EXPECT_EQ_TYPE_INT(1, tmp_mock->call_mock_condition args_call_with_parenthesis);*/ /*LOG("%s\n","failure condition");*/\ @@ -145,13 +145,13 @@ extern struct list_base_fmock *g_list_base_fmock; /*return (returntype)0;*//* default return */\ if( (tmp_mock->info_mock)->str_caller == NULL){ \ if(count_call_f == 1){\ - PRINT_HK_C(colors_f[k_YELLOW],HK_TR," WARNING, no INIT_CALLER_MOCK; you can put it like this: \n"\ + PRINT_HK_C(colors_f[k_YELLOW],tab_hk_f[hk_TR]," WARNING, no INIT_CALLER_MOCK; you can put it like this: \n"\ "%s TEST(nametest){\n"\ "%s\t INIT_CALLER_MOCK(%s); \n"\ "%s\t %s%s; \n"\ "%s }\n"\ "%s i.e before calling %s in this TEST, to have explicit logs\n",\ - HK_TR, HK_TR, #namefunction, HK_TR,#namefunction,#args_call_with_parenthesis, HK_TR, HK_TR, #namefunction);} \ + tab_hk_f[hk_TR], tab_hk_f[hk_TR], #namefunction, tab_hk_f[hk_TR],#namefunction,#args_call_with_parenthesis, tab_hk_f[hk_TR], tab_hk_f[hk_TR], #namefunction);} \ /*return (returntype)0;*/ \ }\ else if (((tmp_mock->info_mock)->times_left != 0) && ((tmp_mock->info_mock)->times_left != INITSTATE )) {\ @@ -164,7 +164,7 @@ extern struct list_base_fmock *g_list_base_fmock; }\ /*if(0 == tmp_mock->call_mock_condition args_call_with_parenthesis){\ PRINT_LOC("Failure, arguments not expected\ncondition ( %s ) not verified\n\n", (tmp_mock->info_mock)->str_conditions);\ - PRINT_HK_C(RED_K,HK_TR," 1 argument check failed from %s \n",__func__); \ + PRINT_HK_C(RED_K,tab_hk_f[hk_TR]," 1 argument check failed from %s \n",__func__); \ }*/\ PRINT_DEBUG(" %*c VALUES: mock function:%s, conditions:%s t_left:%ld, init_left:%ld| args:%s\n",8,'^',(tmp_mock->info_mock)->str_namefunc, (tmp_mock->info_mock)->str_conditions, (tmp_mock->info_mock)->times_left,(tmp_mock->info_mock)->init_times_left, #args_call_with_parenthesis);\ if (((tmp_mock->info_mock)->times_left <= INFINITY) || ((tmp_mock->info_mock)->times_left > 0)){\ diff --git a/include_ytest/include/ftest/ftest.h b/include_ytest/include/ftest/ftest.h index 9797e9c..3b99355 100644 --- a/include_ytest/include/ftest/ftest.h +++ b/include_ytest/include/ftest/ftest.h @@ -27,16 +27,16 @@ #define SZ_TAB_HK 8 -#ifdef HK - #define HK_EQ "[==========]" - #define HK_TR "[----------]" - #define HK_RN "[RUN ]" - #define HK_DN "[ DONE]" - #define HK_OK "[ OK ]" - #define HK_FL "[ FAILED ]" - #define HK_PS "[ PASSED ]" - #define HK_SK "[ SKIP ]" -#else +/*#ifdef HK*/ + #define gHK_EQ "[==========]" + #define gHK_TR "[----------]" + #define gHK_RN "[RUN ]" + #define gHK_DN "[ DONE]" + #define gHK_OK "[ OK ]" + #define gHK_FL "[ FAILED ]" + #define gHK_PS "[ PASSED ]" + #define gHK_SK "[ SKIP ]" +/*#else*/ #define HK_EQ "==========" #define HK_TR "----------" #define HK_RN "====== RUN" @@ -45,7 +45,7 @@ #define HK_FL "===== FAIL" #define HK_PS "===== PASS" #define HK_SK "===== SKIP" -#endif /* HK */ +/*#endif*/ /* HK */ /* * compare symbol @@ -59,9 +59,11 @@ extern FILE **f_ou_th; +extern bool debug; extern bool unicolour; extern bool ordered; extern bool log_parallel; +extern bool only_usage; extern char *savelog; extern char *colors_f[]; @@ -131,14 +133,15 @@ extern char *varHK_EQ, *varHK_TR, *varHK_RN, *varHK_DN, *varHK_OK, *varHK_FL, *v #define PRINT_HK_C(color,hk,fmt,...)\ PRINTF("%s%s%s" fmt, color,hk,colors_f[k_DEFAULT],__VA_ARGS__) - +#define PRINT_DEBUG(fmt, ...)\ + do{ if(debug) PRINT_LOC(fmt, __VA_ARGS__);} while(0) /* * to skip the bloc test function */ #define SKIP(fmt,...)\ - PRINT_HK_C(colors_f[k_GREEN], HK_SK, fmt, ## __VA_ARGS__);\ + PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_SK], fmt, ## __VA_ARGS__);\ PRINT_LOC("%s\n\n" DEFAULT_K," Skiped "); return; @@ -307,26 +310,26 @@ GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_STRING) do{ \ if(is_parallel_nb == 0){\ if(expected_##OP##_##type(var1, var2)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 %s passed %s \n\n",name_f,msg_call); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 %s passed %s \n\n",name_f,msg_call); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 %s failed %s \n",name_f,msg_call); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 %s failed %s \n",name_f,msg_call); \ } \ }else { \ if(expected_##OP##_name_##type(var1, var2, name_f)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 %s passed %s \n\n",name_f,msg_call); \ - /*PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed %s \n\n",name_f);*/ \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 %s passed %s \n\n",name_f,msg_call); \ + /*PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed %s \n\n",name_f);*/ \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 %s failed %s \n",name_f,msg_call); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 %s failed %s \n",name_f,msg_call); \ } \ }\ }while(0); @@ -341,26 +344,26 @@ do{ \ do{ \ if(is_parallel_nb == 0){\ if(expected_##OP##_##type(var1, var2)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }else { \ if(expected_##OP##_name_##type(var1, var2, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }\ @@ -375,25 +378,25 @@ do{ \ do{ \ if(is_parallel_nb == 0){\ if(expected_##OP##_##type(var1, var2)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ } \ }else { \ if(expected_##OP##_name_##type(var1, var2, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ } \ }\ }while(0); @@ -402,26 +405,26 @@ do{ \ do{ \ if(is_parallel_nb == 0){\ if(expected_##OP##_##type(var1, var2)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ return; \ } \ }else { \ if(expected_##OP##_name_##type(var1, var2, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ return; \ } \ }\ @@ -667,21 +670,21 @@ do{ \ do{ \ if(is_parallel_nb==0){\ if(expected_##expect##_f(var1)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n\n", #var1, #not_expect, #expect);\ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }\ else{\ if(expected_##expect##_f_name(var1, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n\n", #var1, #not_expect, #expect);\ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }\ @@ -695,21 +698,21 @@ do{ do{ \ if(is_parallel_nb==0){ \ if(expected_##expect##_f(var1)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n", #var1, #not_expect, #expect); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n\n",__func__); \ } \ } \ else{ \ size_t id_thread=id_of_thread_executed(); \ if(expected_##expect##_f_name(var1, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s, on thread[%ld]\n\n",__func__,id_thread); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s, on thread[%ld]\n\n",__func__,id_thread); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n", #var1, #not_expect, #expect); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s, on thread[%ld]\n\n",__func__,id_thread); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s, on thread[%ld]\n\n",__func__,id_thread); \ } \ } \ }while(0); @@ -719,22 +722,22 @@ do{ do{ \ if(is_parallel_nb==0){ \ if(expected_##expect##_f(var1)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n", #var1, #not_expect, #expect); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n\n",__func__); \ return; \ } \ }\ else{\ size_t id_thread=id_of_thread_executed(); \ if(expected_##expect##_f_name(var1, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s, on thread[%ld]\n\n",__func__,id_thread); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s, on thread[%ld]\n\n",__func__,id_thread); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n\n", #var1, #not_expect, #expect);\ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s, on thread[%ld]\n\n",__func__, id_thread); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s, on thread[%ld]\n\n",__func__, id_thread); \ return; \ } \ }\ diff --git a/include_ytest/include/tools_t/tools_t.h b/include_ytest/include/tools_t/tools_t.h index 10607a4..e4be195 100644 --- a/include_ytest/include/tools_t/tools_t.h +++ b/include_ytest/include/tools_t/tools_t.h @@ -7,6 +7,7 @@ #include #include + // to define DEBUG in gcc cli do: gcc -D DEBUG=1 or 0 if need! #ifndef DEBUG #define DEBUG 0 @@ -45,7 +46,7 @@ void gotoxy(int x, int y); do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ __LINE__, __func__, __VA_ARGS__); } while (0) -#define PRINT_DEBUG(fmt, ...) \ +#define PRINT_DEBUG_(fmt, ...) \ do { if (DEBUG) fprintf(F_ERR, "%s:%d:%s(): " fmt, __FILE__, \ __LINE__, __func__, __VA_ARGS__); } while (0) diff --git a/libytest.so b/libytest.so index 6248557cb2ac7c875caa8fc435b31b1a3da7f44a..5a66247c92cb5c424b1bfa903ddce2c459c907b6 100644 GIT binary patch literal 294880 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%0AXwnlo2Y7B|DzK{BHsx{IfBzTqz{tuio7TJw* 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 XS0m`z-DL9P=P7ypzBJA6mjC|%mgYfO literal 173280 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 diff --git a/yfmock/include/fmock/fmock.h b/yfmock/include/fmock/fmock.h index 7ef12c0..f6728e4 100644 --- a/yfmock/include/fmock/fmock.h +++ b/yfmock/include/fmock/fmock.h @@ -108,16 +108,16 @@ extern struct list_base_fmock *g_list_base_fmock; PRINT_DEBUG(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>count call of %s: %ld\n",#namefunction,count_call_f);\ struct list_mock_return_ ## namefunction *tmp_mock = &list_mo_ ## namefunction;\ if( (tmp_mock->info_mock)->times_left == INITSTATE ){\ - PRINT_HK_C(colors_f[k_YELLOW],HK_TR," WARNING, %s, no EXPECT_MOCK_CALL or WILL_MOCK_CALL, but called %ld times.\n",#namefunction, count_call_f);\ + PRINT_HK_C(colors_f[k_YELLOW],tab_hk_f[hk_TR]," WARNING, %s, no EXPECT_MOCK_CALL or WILL_MOCK_CALL, but called %ld times.\n",#namefunction, count_call_f);\ if(count_call_f==1){\ - PRINT_HK_C(colors_f[k_YELLOW],HK_TR," For instance:\n"\ + PRINT_HK_C(colors_f[k_YELLOW],tab_hk_f[hk_TR]," For instance:\n"\ "%s EXPECT_MOCK_CALL(%s,%s,%s,true,1){\n"\ "%s\t %s ret;\n%s \t ...do something with %s;\n"\ "%s\t return ret;\n"\ "%s }\n"\ "%s if call once and accept all args, the same args with WILL_MOCK_CALL \n\n",\ - HK_TR, #returntype, #namefunction,#args_prototype_with_parenthesis, HK_TR,#returntype, \ - HK_TR, #args_call_with_parenthesis, HK_TR, HK_TR, HK_TR ); \ + tab_hk_f[hk_TR], #returntype, #namefunction,#args_prototype_with_parenthesis, tab_hk_f[hk_TR],#returntype, \ + tab_hk_f[hk_TR], #args_call_with_parenthesis, tab_hk_f[hk_TR], tab_hk_f[hk_TR], tab_hk_f[hk_TR] ); \ /*return (returntype)0;*/ \ INIT_MOCK_INFO_IF_NO_(tmp_mock,namefunction, PRE_ID);\ }/* to have log */\ @@ -129,15 +129,15 @@ extern struct list_base_fmock *g_list_base_fmock; append_variable_current(&((tmp_mock->info_mock)->l_current_var), tmp_mock->str_print_current_variables args_call_with_parenthesis);\ }\ else if(count_call_f == 1){\ - PRINT_HK_C(colors_f[k_YELLOW],HK_TR," no printer variable function defined, to define it:\n"\ + PRINT_HK_C(colors_f[k_YELLOW],tab_hk_f[hk_TR]," no printer variable function defined, to define it:\n"\ "%s STR_PRINT_CUR_VAR(%s,%s,%s){\n"\ "%s\t char* ret=malloc(256);/*for instance*/;\n"\ "%s\t ... sprintf(ret,...., %s);/*for instance*/ \n"\ "%s\t return ret;\n"\ "%s }\n"\ "%s same prototype as MOCK_FUNC whithout returntype which always char* i\n\n",\ - HK_TR, #namefunction,#args_prototype_with_parenthesis, #args_call_with_parenthesis, \ - HK_TR, HK_TR, #args_call_with_parenthesis, HK_TR, HK_TR, HK_TR ); \ + tab_hk_f[hk_TR], #namefunction,#args_prototype_with_parenthesis, #args_call_with_parenthesis, \ + tab_hk_f[hk_TR], tab_hk_f[hk_TR], #args_call_with_parenthesis, tab_hk_f[hk_TR], tab_hk_f[hk_TR], tab_hk_f[hk_TR] ); \ }\ /*LOG("condition_func:%d\n", tmp_mock->call_mock_condition args_call_with_parenthesis);*/ /*LOG("%s\n","failure condition");*/\ /*EXPECT_EQ_TYPE_INT(1, tmp_mock->call_mock_condition args_call_with_parenthesis);*/ /*LOG("%s\n","failure condition");*/\ @@ -145,13 +145,13 @@ extern struct list_base_fmock *g_list_base_fmock; /*return (returntype)0;*//* default return */\ if( (tmp_mock->info_mock)->str_caller == NULL){ \ if(count_call_f == 1){\ - PRINT_HK_C(colors_f[k_YELLOW],HK_TR," WARNING, no INIT_CALLER_MOCK; you can put it like this: \n"\ + PRINT_HK_C(colors_f[k_YELLOW],tab_hk_f[hk_TR]," WARNING, no INIT_CALLER_MOCK; you can put it like this: \n"\ "%s TEST(nametest){\n"\ "%s\t INIT_CALLER_MOCK(%s); \n"\ "%s\t %s%s; \n"\ "%s }\n"\ "%s i.e before calling %s in this TEST, to have explicit logs\n",\ - HK_TR, HK_TR, #namefunction, HK_TR,#namefunction,#args_call_with_parenthesis, HK_TR, HK_TR, #namefunction);} \ + tab_hk_f[hk_TR], tab_hk_f[hk_TR], #namefunction, tab_hk_f[hk_TR],#namefunction,#args_call_with_parenthesis, tab_hk_f[hk_TR], tab_hk_f[hk_TR], #namefunction);} \ /*return (returntype)0;*/ \ }\ else if (((tmp_mock->info_mock)->times_left != 0) && ((tmp_mock->info_mock)->times_left != INITSTATE )) {\ @@ -164,7 +164,7 @@ extern struct list_base_fmock *g_list_base_fmock; }\ /*if(0 == tmp_mock->call_mock_condition args_call_with_parenthesis){\ PRINT_LOC("Failure, arguments not expected\ncondition ( %s ) not verified\n\n", (tmp_mock->info_mock)->str_conditions);\ - PRINT_HK_C(RED_K,HK_TR," 1 argument check failed from %s \n",__func__); \ + PRINT_HK_C(RED_K,tab_hk_f[hk_TR]," 1 argument check failed from %s \n",__func__); \ }*/\ PRINT_DEBUG(" %*c VALUES: mock function:%s, conditions:%s t_left:%ld, init_left:%ld| args:%s\n",8,'^',(tmp_mock->info_mock)->str_namefunc, (tmp_mock->info_mock)->str_conditions, (tmp_mock->info_mock)->times_left,(tmp_mock->info_mock)->init_times_left, #args_call_with_parenthesis);\ if (((tmp_mock->info_mock)->times_left <= INFINITY) || ((tmp_mock->info_mock)->times_left > 0)){\ diff --git a/yfmock/src/fmock/fmock.c b/yfmock/src/fmock/fmock.c index 5a0edf4..c63a248 100644 --- a/yfmock/src/fmock/fmock.c +++ b/yfmock/src/fmock/fmock.c @@ -163,7 +163,7 @@ char * strprint_caller_(char *input){ #define PRINT_VAR_CUR(mockinfo)\ do{\ - PRINTF("\n%s list of variables when %s was called, with condition %s:\n\t\t",HK_EQ,mockinfo->str_namefunc,mockinfo->str_conditions);\ + PRINTF("\n%s list of variables when %s was called, with condition %s:\n\t\t",tab_hk_f[hk_EQ],mockinfo->str_namefunc,mockinfo->str_conditions);\ size_t cal_cur=0;\ struct list_current_variable *tmp_cur_v = mockinfo->l_current_var;\ while(tmp_cur_v){\ @@ -187,7 +187,7 @@ __attribute__((destructor)) //k_GREEN=k_NOTHING; k_RED=k_NOTHING; k_YELLOW=k_NOTHING; k_BLUE=k_NOTHING; //for(int i=0; i< Dk_NOTHING;++i) strcpy(colors_f[i]," "); //} - + if(only_usage) return; /* do nothing */ struct winsize w; ioctl(1, TIOCGWINSZ, &w); @@ -207,7 +207,7 @@ __attribute__((destructor)) PRINT_DEBUG("**** STAT mock function:%s, conditions:%s t_left:%ld, init_left:%ld, failed_call:%ld\n",tmock->str_namefunc, tmock->str_conditions, tmock->times_left,tmock->init_times_left, tmock->failed_call); if(((tmock->expect_call) && (tmock->init_times_left == tmock->times_left)) || (tmock->failed_call)){ if(tmock->l_current_var){ - PRINTF("%s%s %s%s %s: expect %s, it was called %ld times and failed %ld times, with condition %s\n",colors_f[k_RED],HK_FL,colors_f[k_YELLOW],tmock->str_namefunc,DEFAULT_K, + PRINTF("%s%s %s%s %s: expect %s, it was called %ld times and failed %ld times, with condition %s\n",colors_f[k_RED],tab_hk_f[hk_FL],colors_f[k_YELLOW],tmock->str_namefunc,DEFAULT_K, number_call_translate(tmock->init_times_left), tmock->call/*tmock->failed_call + (tmock->init_times_left - tmock->times_left)*/, tmock->failed_call, @@ -216,7 +216,7 @@ __attribute__((destructor)) PRINT_VAR_CUR(tmock); } else - PRINTF("%s%s %s%s %s: expect %s, it was called %ld times and failed %ld times, with condition %s \n",colors_f[k_RED],HK_FL,colors_f[k_YELLOW],tmock->str_namefunc,DEFAULT_K, + PRINTF("%s%s %s%s %s: expect %s, it was called %ld times and failed %ld times, with condition %s \n",colors_f[k_RED],tab_hk_f[hk_FL],colors_f[k_YELLOW],tmock->str_namefunc,DEFAULT_K, number_call_translate(tmock->init_times_left), tmock->call/*tmock->failed_call + (tmock->init_times_left - tmock->times_left)*/, tmock->failed_call, @@ -227,7 +227,7 @@ __attribute__((destructor)) //free(tfree); } - PRINTF("\n%s%s STAT MOCK : there are %ld mock functions, %ld wished responses, %ld expected responses, which are:\n\n",colors_f[k_GREEN],HK_EQ,count_f_mock, count_f_mock_wished, count_expect_mock); + PRINTF("\n%s%s STAT MOCK : there are %ld mock functions, %ld wished responses, %ld expected responses, which are:\n\n",colors_f[k_GREEN],tab_hk_f[hk_EQ],count_f_mock, count_f_mock_wished, count_expect_mock); struct list_base_fmock *tmp_list_fm = g_list_base_fmock; struct func_mock_info_struct *tmp_inf_mock; /* list each fmock an each calls */ diff --git a/yftest/include/ftest/ftest.h b/yftest/include/ftest/ftest.h index 9797e9c..3b99355 100644 --- a/yftest/include/ftest/ftest.h +++ b/yftest/include/ftest/ftest.h @@ -27,16 +27,16 @@ #define SZ_TAB_HK 8 -#ifdef HK - #define HK_EQ "[==========]" - #define HK_TR "[----------]" - #define HK_RN "[RUN ]" - #define HK_DN "[ DONE]" - #define HK_OK "[ OK ]" - #define HK_FL "[ FAILED ]" - #define HK_PS "[ PASSED ]" - #define HK_SK "[ SKIP ]" -#else +/*#ifdef HK*/ + #define gHK_EQ "[==========]" + #define gHK_TR "[----------]" + #define gHK_RN "[RUN ]" + #define gHK_DN "[ DONE]" + #define gHK_OK "[ OK ]" + #define gHK_FL "[ FAILED ]" + #define gHK_PS "[ PASSED ]" + #define gHK_SK "[ SKIP ]" +/*#else*/ #define HK_EQ "==========" #define HK_TR "----------" #define HK_RN "====== RUN" @@ -45,7 +45,7 @@ #define HK_FL "===== FAIL" #define HK_PS "===== PASS" #define HK_SK "===== SKIP" -#endif /* HK */ +/*#endif*/ /* HK */ /* * compare symbol @@ -59,9 +59,11 @@ extern FILE **f_ou_th; +extern bool debug; extern bool unicolour; extern bool ordered; extern bool log_parallel; +extern bool only_usage; extern char *savelog; extern char *colors_f[]; @@ -131,14 +133,15 @@ extern char *varHK_EQ, *varHK_TR, *varHK_RN, *varHK_DN, *varHK_OK, *varHK_FL, *v #define PRINT_HK_C(color,hk,fmt,...)\ PRINTF("%s%s%s" fmt, color,hk,colors_f[k_DEFAULT],__VA_ARGS__) - +#define PRINT_DEBUG(fmt, ...)\ + do{ if(debug) PRINT_LOC(fmt, __VA_ARGS__);} while(0) /* * to skip the bloc test function */ #define SKIP(fmt,...)\ - PRINT_HK_C(colors_f[k_GREEN], HK_SK, fmt, ## __VA_ARGS__);\ + PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_SK], fmt, ## __VA_ARGS__);\ PRINT_LOC("%s\n\n" DEFAULT_K," Skiped "); return; @@ -307,26 +310,26 @@ GEN_EXPECTED_OP_TYPE_FUNC(NE, TYPE_STRING) do{ \ if(is_parallel_nb == 0){\ if(expected_##OP##_##type(var1, var2)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 %s passed %s \n\n",name_f,msg_call); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 %s passed %s \n\n",name_f,msg_call); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 %s failed %s \n",name_f,msg_call); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 %s failed %s \n",name_f,msg_call); \ } \ }else { \ if(expected_##OP##_name_##type(var1, var2, name_f)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 %s passed %s \n\n",name_f,msg_call); \ - /*PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed %s \n\n",name_f);*/ \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 %s passed %s \n\n",name_f,msg_call); \ + /*PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed %s \n\n",name_f);*/ \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 %s failed %s \n",name_f,msg_call); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 %s failed %s \n",name_f,msg_call); \ } \ }\ }while(0); @@ -341,26 +344,26 @@ do{ \ do{ \ if(is_parallel_nb == 0){\ if(expected_##OP##_##type(var1, var2)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }else { \ if(expected_##OP##_name_##type(var1, var2, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }\ @@ -375,25 +378,25 @@ do{ \ do{ \ if(is_parallel_nb == 0){\ if(expected_##OP##_##type(var1, var2)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ } \ }else { \ if(expected_##OP##_name_##type(var1, var2, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ } \ }\ }while(0); @@ -402,26 +405,26 @@ do{ \ do{ \ if(is_parallel_nb == 0){\ if(expected_##OP##_##type(var1, var2)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); */ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ return; \ } \ }else { \ if(expected_##OP##_name_##type(var1, var2, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ /*PRINT_LOC("Failure\nExpected %s of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ ,DESCRIPTION_##OP ,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2));*/ \ PRINT_LOC("Failure\nExpected: (%s) %s (%s) :\n Value of %s: %s \n Value of %s: %s\n\n"\ ,#var1,STRFY(OP),#var2,#var1, type##_TO_STR(var1), #var2, type##_TO_STR(var2)); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ return; \ } \ }\ @@ -667,21 +670,21 @@ do{ \ do{ \ if(is_parallel_nb==0){\ if(expected_##expect##_f(var1)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n\n", #var1, #not_expect, #expect);\ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }\ else{\ if(expected_##expect##_f_name(var1, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n\n", #var1, #not_expect, #expect);\ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n",__func__); \ if(is_assert) return; \ } \ }\ @@ -695,21 +698,21 @@ do{ do{ \ if(is_parallel_nb==0){ \ if(expected_##expect##_f(var1)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n", #var1, #not_expect, #expect); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n\n",__func__); \ } \ } \ else{ \ size_t id_thread=id_of_thread_executed(); \ if(expected_##expect##_f_name(var1, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s, on thread[%ld]\n\n",__func__,id_thread); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s, on thread[%ld]\n\n",__func__,id_thread); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n", #var1, #not_expect, #expect); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s, on thread[%ld]\n\n",__func__,id_thread); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s, on thread[%ld]\n\n",__func__,id_thread); \ } \ } \ }while(0); @@ -719,22 +722,22 @@ do{ do{ \ if(is_parallel_nb==0){ \ if(expected_##expect##_f(var1)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s \n\n",__func__); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n", #var1, #not_expect, #expect); \ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s \n\n",__func__); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s \n\n",__func__); \ return; \ } \ }\ else{\ size_t id_thread=id_of_thread_executed(); \ if(expected_##expect##_f_name(var1, __func__)){ \ - PRINT_HK_C(colors_f[k_GREEN],HK_TR," 1 test passed from %s, on thread[%ld]\n\n",__func__,id_thread); \ + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_TR]," 1 test passed from %s, on thread[%ld]\n\n",__func__,id_thread); \ } \ else{ \ PRINT_LOC("Failure\nValue of: %s\nActual: %s\nExpected: %s\n\n", #var1, #not_expect, #expect);\ - PRINT_HK_C(colors_f[k_RED],HK_TR," 1 test failed from %s, on thread[%ld]\n\n",__func__, id_thread); \ + PRINT_HK_C(colors_f[k_RED],tab_hk_f[hk_TR]," 1 test failed from %s, on thread[%ld]\n\n",__func__, id_thread); \ return; \ } \ }\ diff --git a/yftest/src/ftest/ftest.c b/yftest/src/ftest/ftest.c index 2ada557..04d476a 100644 --- a/yftest/src/ftest/ftest.c +++ b/yftest/src/ftest/ftest.c @@ -55,6 +55,8 @@ bool some_thing_wrong = 0; bool help=0; bool only_usage=0; bool ordered= 0; +bool gtestlike=0; +bool debug=0; bool unicolour = 0; bool removelog = 0; char *timeunit="ms"; @@ -69,9 +71,10 @@ char *colors_f[]={DEFAULT_K, GREEN_K, RED_K, YELLOW_K, BLUE_K, ""}; int k_DEFAULT=0, k_GREEN=1, k_RED=2, k_YELLOW=3, k_BLUE=4, k_NOTHING=Dknothing; char *tab_hk_f[]={ HK_EQ, HK_TR, HK_RN, HK_DN, HK_OK, HK_FL, HK_PS, HK_SK }; +char *g_tab_hk_f[]={ gHK_EQ, gHK_TR, gHK_RN, gHK_DN, gHK_OK, gHK_FL, gHK_PS, gHK_SK }; int hk_EQ=0, hk_TR=1, hk_RN=2, hk_DN=3, hk_OK=4, hk_FL=5, hk_PS=6, hk_SK=7 ; -char *varHK_EQ=HK_EQ, *varHK_TR=HK_TR, *varHK_RN=HK_RN, *varHK_DN=HK_DN, *varHK_OK=HK_OK, *varHK_FL=HK_FL, *varHK_PS=HK_PS, *varHK_SK=HK_SK; +//char *varHK_EQ=HK_EQ, *varHK_TR=HK_TR, *varHK_RN=HK_RN, *varHK_DN=HK_DN, *varHK_OK=HK_OK, *varHK_FL=HK_FL, *varHK_PS=HK_PS, *varHK_SK=HK_SK; bool some_tests_selected=0; @@ -270,6 +273,11 @@ void setup_variables_before_exec(){ default_bar_progress=tmp_bp; } } + + if(gtestlike){ + for(int i=0; i<=hk_SK; ++i) + tab_hk_f[i]=g_tab_hk_f[i]; + } /*if(savelog){ f_savelog=fopen(savelog, "w+"); @@ -283,6 +291,8 @@ void usage(int argc, char **argv){ printf("usage: %s [OPTIONS] [] \n\n or : %s [OPTIONS]=[]\n\n",argv[0],argv[0]); printf("OPTIONS\n"); printf("\t -h, --help \n\t\tprint help, options variables\n\n"); + printf("\t -d, --debug \n\t\tto print debug by using PRINT_DEBUG, by default PRINT_DEBUG is off\n\n"); + printf("\t -g, --gtestlike \n\t\tto have gtest hook like!\n\n"); printf("\t -p , --parallel , -p=, --parallel=\n\t\tby default the program ran in sequantial all test, \n\t\tif this option is set, the program run tests on NB threads.\n\t\tEach thread pull up one test out the list of all test not yet executed,\n\t\tand execute it, until the list is empty \n\n"); printf("\t -t , --time , -t=, --time= \n\t\tby default unit is millisecons ms, the other of unit are choices are second (or s), and nanosecond (or ns)\n\t\tex: -t ns or -t=nanosecond or --time=n to set nanosecond unit\n\n"); printf("\t -u , --unicolour\n\t\tby default, the result is colored, if you choice this option, it prints with default color\n\n"); @@ -557,6 +567,8 @@ void parse_options(int argc, char **argv){ for(int i=1; iname);\ + PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL]," %s\n",failed_lst->name);\ failed_lst = failed_lst->next;\ } @@ -596,7 +608,7 @@ void list_failed_test(struct failed_lists *test_failed){ LISTE_ALL_FAILED_TEST_IN_F_OUT }else{ while(failed_lst){ - PRINT_HK_C(colors_f[k_RED], HK_FL," %s, on thread[%ld]\n",failed_lst->name,id_thrd); + PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL]," %s, on thread[%ld]\n",failed_lst->name,id_thrd); failed_lst = failed_lst->next; } } @@ -604,7 +616,7 @@ void list_failed_test(struct failed_lists *test_failed){ else{ LISTE_ALL_FAILED_TEST_IN_F_OUT } - PRINT_HK_C(colors_f[k_DEFAULT], HK_EQ,"%s\n",""); + PRINT_HK_C(colors_f[k_DEFAULT], tab_hk_f[hk_EQ],"%s\n",""); } @@ -820,22 +832,22 @@ append_func(void (*run)(void), char *name){ void begin_execute_func(char *fun_ame, struct timespec *start_t){ clock_gettime(CLOCK_REALTIME, start_t); - PRINT_HK_C(colors_f[k_GREEN],HK_RN," %s\n", fun_ame); + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_RN]," %s\n", fun_ame); count_pass_local = 0; count_fail_local = 0; } #define PRINT_TIMESTAMP_STAT(color)\ - if(SECOND) PRINT_HK_C(color,HK_DN," %lu tests passed from %s (%lf s)\n\n",count_pass_local,fun_ame, diff_timespec_seconds(end_t, start_t));\ - else if(NANOSECOND) PRINT_HK_C(color,HK_DN," %lu tests passed from %s (%ld ns)\n\n",count_pass_local,fun_ame, diff_timespec_nanoseconds(end_t, start_t));\ - else PRINT_HK_C(color,HK_DN," %lu tests passed from %s (%lf ms)\n\n",count_pass_local,fun_ame, diff_timespec_milliseconds(end_t, start_t)); + if(SECOND) PRINT_HK_C(color,tab_hk_f[hk_DN]," %lu tests passed from %s (%lf s)\n\n",count_pass_local,fun_ame, diff_timespec_seconds(end_t, start_t));\ + else if(NANOSECOND) PRINT_HK_C(color,tab_hk_f[hk_DN]," %lu tests passed from %s (%ld ns)\n\n",count_pass_local,fun_ame, diff_timespec_nanoseconds(end_t, start_t));\ + else PRINT_HK_C(color,tab_hk_f[hk_DN]," %lu tests passed from %s (%lf ms)\n\n",count_pass_local,fun_ame, diff_timespec_milliseconds(end_t, start_t)); void end_execute_func(char *fun_ame, struct timespec start_t){ struct timespec end_t; clock_gettime(CLOCK_REALTIME, &end_t); if(count_fail_local){ INCREMENT(count_fail_global); /*++count_fail_global*/ append_failed_list(&failed_l, fun_ame); - PRINT_HK_C(colors_f[k_RED], HK_FL, " %lu tests failed from %s\n",count_fail_local,fun_ame); + PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL], " %lu tests failed from %s\n",count_fail_local,fun_ame); PRINT_TIMESTAMP_STAT(colors_f[k_RED]); } else @@ -849,8 +861,8 @@ void end_execute_func(char *fun_ame, struct timespec start_t){ */ void head_run(size_t nbtest, struct timespec *start_t){ clock_gettime(CLOCK_REALTIME, start_t); - if(cur_array_TYPE_SIZE_T || cur_array_TYPE_STRING) PRINT_HK_C(colors_f[k_GREEN], HK_EQ,"%s"," Running tests.\n"); - else PRINT_HK_C(colors_f[k_GREEN], HK_EQ," Running %lu tests.\n",nbtest); + if(cur_array_TYPE_SIZE_T || cur_array_TYPE_STRING) PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ],"%s"," Running tests.\n"); + else PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," Running %lu tests.\n",nbtest); } /* @@ -860,13 +872,13 @@ void stat_end_run(size_t ntst, struct timespec start_t){ struct timespec end_t; clock_gettime(CLOCK_REALTIME, &end_t); - if(SECOND) PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran. (%lf s total)\n",ntst, diff_timespec_seconds(end_t, start_t)); - else if(NANOSECOND) PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran. (%ld ns total)\n",ntst, diff_timespec_nanoseconds(end_t, start_t)); - else PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran. (%lf ms total)\n",ntst, diff_timespec_milliseconds(end_t, start_t)); + if(SECOND) PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran. (%lf s total)\n",ntst, diff_timespec_seconds(end_t, start_t)); + else if(NANOSECOND) PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran. (%ld ns total)\n",ntst, diff_timespec_nanoseconds(end_t, start_t)); + else PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran. (%lf ms total)\n",ntst, diff_timespec_milliseconds(end_t, start_t)); - PRINT_HK_C(colors_f[k_GREEN], HK_PS," %lu tests\n", count_pass_global); + PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_PS]," %lu tests\n", count_pass_global); if(failed_l != NULL){ - PRINT_HK_C(colors_f[k_RED], HK_FL," %lu tests, listed below:\n",count_fail_global); + PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL]," %lu tests, listed below:\n",count_fail_global); list_failed_test(failed_l); PRINT_HK_C("","","\n%ld FAILED TESTS \n",count_fail_global); } @@ -957,7 +969,7 @@ void execute_all(struct func *fun){ size_t num_f; char *name_test=NULL; bool exec_test=0; - //PRINT_HK_C(colors_f[k_GREEN], HK_EQ," Running %lu tests.\n",count_tests); + //PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," Running %lu tests.\n",count_tests); while(tmp){ current_fn = tmp; CHECK_IF_SELECTED_TEST(tmp->name) @@ -1000,8 +1012,8 @@ run_all_tests() */ void head_all_parallel_run(struct timespec *start_t){ clock_gettime(CLOCK_REALTIME, start_t); - if (cur_array_TYPE_SIZE_T || cur_array_TYPE_STRING) PRINT_HK_C(colors_f[k_GREEN], HK_EQ," Running tests on %ld threads\n", parallel_nb); - else PRINT_HK_C(colors_f[k_GREEN], HK_EQ," Running %ld tests on %ld threads\n",count_tests, parallel_nb); + if (cur_array_TYPE_SIZE_T || cur_array_TYPE_STRING) PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," Running tests on %ld threads\n", parallel_nb); + else PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," Running %ld tests on %ld threads\n",count_tests, parallel_nb); } /* @@ -1011,7 +1023,7 @@ void head_parallel_run(struct timespec *start_t, size_t id_thrd){ sprintf(log_name_file_thrd[id_thrd],"log_thread_%ld_id_%ld",id_thrd,pthread_self()); f_ou_th[id_thrd] = fopen(log_name_file_thrd[id_thrd], "w+"); clock_gettime(CLOCK_REALTIME, start_t); - PRINT_HK_C(colors_f[k_GREEN], HK_EQ," Running tests on thread[%ld] ========== ==threadID== %ld \n", id_thrd,pthread_self()); + PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," Running tests on thread[%ld] ========== ==threadID== %ld \n", id_thrd,pthread_self()); } /* @@ -1021,13 +1033,13 @@ void stat_end_parallel_run(size_t ntst, struct timespec start_t, size_t id_thrd){ struct timespec end_t; clock_gettime(CLOCK_REALTIME, &end_t); - if(SECOND) PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran on thread[%ld]. (%lf s total) \n",ntst, id_thrd, diff_timespec_seconds(end_t, start_t)); - else if(NANOSECOND) PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran on thread[%ld]. (%ld ns total)\n",ntst, id_thrd, diff_timespec_nanoseconds(end_t, start_t)); - else PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran on thread[%ld]. (%lf ms total)\n",ntst, id_thrd, diff_timespec_milliseconds(end_t, start_t)); + if(SECOND) PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran on thread[%ld]. (%lf s total) \n",ntst, id_thrd, diff_timespec_seconds(end_t, start_t)); + else if(NANOSECOND) PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran on thread[%ld]. (%ld ns total)\n",ntst, id_thrd, diff_timespec_nanoseconds(end_t, start_t)); + else PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran on thread[%ld]. (%lf ms total)\n",ntst, id_thrd, diff_timespec_milliseconds(end_t, start_t)); - PRINT_HK_C(colors_f[k_GREEN], HK_PS," %lu tests passed on thread[%ld]\n", count_pass_thread[id_thrd], id_thrd); + PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_PS]," %lu tests passed on thread[%ld]\n", count_pass_thread[id_thrd], id_thrd); if(thread_test_failed_l[id_thrd] != NULL){ - PRINT_HK_C(colors_f[k_RED], HK_FL," %lu tests failed on thread[%ld], listed below:\n",count_fail_thread[id_thrd],id_thrd); + PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL]," %lu tests failed on thread[%ld], listed below:\n",count_fail_thread[id_thrd],id_thrd); list_failed_test(thread_test_failed_l[id_thrd]); } } @@ -1039,15 +1051,15 @@ void stat_end_all_parallel_run(size_t ntst, struct timespec start_t){ struct timespec end_t; clock_gettime(CLOCK_REALTIME, &end_t); - //PRINT_HK_C(colors_f[k_DEFAULT], HK_EQ," %s: all parallel tests done\n\n",__FILE__); + //PRINT_HK_C(colors_f[k_DEFAULT], tab_hk_f[hk_EQ]," %s: all parallel tests done\n\n",__FILE__); - if(SECOND) PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran on %ld threads. (%lf s total) \n",ntst, parallel_nb, diff_timespec_seconds(end_t, start_t)); - else if(NANOSECOND) PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran on %ld threads. (%ld ns total)\n",ntst, parallel_nb, diff_timespec_nanoseconds(end_t, start_t)); - else PRINT_HK_C(colors_f[k_GREEN], HK_EQ," %lu tests ran on %ld threads. (%lf ms total)\n",ntst, parallel_nb, diff_timespec_milliseconds(end_t, start_t)); + if(SECOND) PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran on %ld threads. (%lf s total) \n",ntst, parallel_nb, diff_timespec_seconds(end_t, start_t)); + else if(NANOSECOND) PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran on %ld threads. (%ld ns total)\n",ntst, parallel_nb, diff_timespec_nanoseconds(end_t, start_t)); + else PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_EQ]," %lu tests ran on %ld threads. (%lf ms total)\n",ntst, parallel_nb, diff_timespec_milliseconds(end_t, start_t)); - PRINT_HK_C(colors_f[k_GREEN], HK_PS," %lu tests\n", count_pass_global); + PRINT_HK_C(colors_f[k_GREEN], tab_hk_f[hk_PS]," %lu tests\n", count_pass_global); if(failed_l != NULL){ - PRINT_HK_C(colors_f[k_RED], HK_FL," %lu tests, listed below:\n",count_fail_global); + PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL]," %lu tests, listed below:\n",count_fail_global); list_failed_test(failed_l); PRINT_HK_C("","","\n%ld FAILED TESTS \n",count_fail_global); } @@ -1057,13 +1069,13 @@ stat_end_all_parallel_run(size_t ntst, struct timespec start_t){ void begin_execute_func_parallel(char *fun_ame, struct timespec *start_t, size_t id_thrd){ clock_gettime(CLOCK_REALTIME, start_t); - PRINT_HK_C(colors_f[k_GREEN],HK_RN," %s on thread[%ld]\n", fun_ame, id_thrd); + PRINT_HK_C(colors_f[k_GREEN],tab_hk_f[hk_RN]," %s on thread[%ld]\n", fun_ame, id_thrd); } #define PRINT_TIMESTAMP_STAT_PARALLEL(color)\ - if(SECOND) PRINT_HK_C(color,HK_DN," %lu tests passed from %s (%lf s), on thread[%ld]\n\n",count_pass_test[num_test],fun_ame, diff_timespec_seconds(end_t, start_t),id_thrd);\ - else if(NANOSECOND) PRINT_HK_C(color,HK_DN," %lu tests passed from %s (%ld ns), on thread[%ld]\n\n",count_pass_test[num_test],fun_ame, diff_timespec_nanoseconds(end_t, start_t),id_thrd);\ - else PRINT_HK_C(color,HK_DN," %lu tests passed from %s (%lf ms), on thread[%ld]\n\n",count_pass_test[num_test],fun_ame, diff_timespec_milliseconds(end_t, start_t),id_thrd); + if(SECOND) PRINT_HK_C(color,tab_hk_f[hk_DN]," %lu tests passed from %s (%lf s), on thread[%ld]\n\n",count_pass_test[num_test],fun_ame, diff_timespec_seconds(end_t, start_t),id_thrd);\ + else if(NANOSECOND) PRINT_HK_C(color,tab_hk_f[hk_DN]," %lu tests passed from %s (%ld ns), on thread[%ld]\n\n",count_pass_test[num_test],fun_ame, diff_timespec_nanoseconds(end_t, start_t),id_thrd);\ + else PRINT_HK_C(color,tab_hk_f[hk_DN]," %lu tests passed from %s (%lf ms), on thread[%ld]\n\n",count_pass_test[num_test],fun_ame, diff_timespec_milliseconds(end_t, start_t),id_thrd); void end_execute_func_parallel(char *fun_ame, struct timespec start_t, size_t id_thrd){ struct timespec end_t; clock_gettime(CLOCK_REALTIME, &end_t); @@ -1076,7 +1088,7 @@ void end_execute_func_parallel(char *fun_ame, struct timespec start_t, size_t id LOCK(mut_global_list_fail); append_failed_list(&failed_l, fun_ame); UNLOCK(mut_global_list_fail); - PRINT_HK_C(colors_f[k_RED], HK_FL, " %lu tests failed from %s on thread[%ld], %ld tests failed on thread[%ld]\n",count_fail_test[num_test],fun_ame, id_thrd,count_fail_thread[id_thrd],id_thrd); + PRINT_HK_C(colors_f[k_RED], tab_hk_f[hk_FL], " %lu tests failed from %s on thread[%ld], %ld tests failed on thread[%ld]\n",count_fail_test[num_test],fun_ame, id_thrd,count_fail_thread[id_thrd],id_thrd); PRINT_TIMESTAMP_STAT_PARALLEL(colors_f[k_RED]); } else @@ -1193,6 +1205,7 @@ init_parallel_test_() void final_parallel_test_() { + is_parallel_nb = 0; /* to avoid issue when print debug afer removing log_ of each thread if removelog is active */ free(count_pass_test); free(count_fail_test); diff --git a/ytools_t/include/tools_t/tools_t.h b/ytools_t/include/tools_t/tools_t.h index 10607a4..e4be195 100644 --- a/ytools_t/include/tools_t/tools_t.h +++ b/ytools_t/include/tools_t/tools_t.h @@ -7,6 +7,7 @@ #include #include + // to define DEBUG in gcc cli do: gcc -D DEBUG=1 or 0 if need! #ifndef DEBUG #define DEBUG 0 @@ -45,7 +46,7 @@ void gotoxy(int x, int y); do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ __LINE__, __func__, __VA_ARGS__); } while (0) -#define PRINT_DEBUG(fmt, ...) \ +#define PRINT_DEBUG_(fmt, ...) \ do { if (DEBUG) fprintf(F_ERR, "%s:%d:%s(): " fmt, __FILE__, \ __LINE__, __func__, __VA_ARGS__); } while (0) diff --git a/ytools_t/src/tools_t/tools_t.c b/ytools_t/src/tools_t/tools_t.c index 30ce1a5..16f3aa7 100644 --- a/ytools_t/src/tools_t/tools_t.c +++ b/ytools_t/src/tools_t/tools_t.c @@ -89,7 +89,7 @@ TYPE_STRING TYPE_STRING_TO_STR(TYPE_STRING var){ #define GENERATE_FUNCTION_NUMERIC(type)\ int COMPARE_N_##type(const void *a, const void *b){ \ type diff = (*(type*)a - *(type*)b)*PRECISION_##type; \ - PRINT_DEBUG(" diff = %s a=%s b=%s \n",type##_TO_STR(diff),type##_TO_STR(*(type*)a), type##_TO_STR(*(type*)b));\ + PRINT_DEBUG_(" diff = %s a=%s b=%s \n",type##_TO_STR(diff),type##_TO_STR(*(type*)a), type##_TO_STR(*(type*)b));\ if ((diff < 1) && (diff > -1) ) return 0; \ return diff; \ } \ @@ -102,7 +102,7 @@ TYPE_STRING TYPE_STRING_TO_STR(TYPE_STRING var){ int COMPARE_N_TYPE_STRING(const void *a,const void* b) { - PRINT_DEBUG("a=%s, b=%s\n",(char*)a, (char*)b); + PRINT_DEBUG_("a=%s, b=%s\n",(char*)a, (char*)b); return strcmp(( char*)a,( char*)b); } @@ -172,17 +172,17 @@ GENERATE_FUNCTION_ALL(TYPE_STRING) */ double diff_timespec_seconds(struct timespec time_stop, struct timespec time_start){ - //PRINT_DEBUG("\n\nstop.sec:%ld, start.sec:%ld, stop.nsec:%ld, start.nsec:%ld\n\n", time_stop.tv_sec , time_start.tv_sec, time_stop.tv_nsec , time_start.tv_nsec); + //PRINT_DEBUG_("\n\nstop.sec:%ld, start.sec:%ld, stop.nsec:%ld, start.nsec:%ld\n\n", time_stop.tv_sec , time_start.tv_sec, time_stop.tv_nsec , time_start.tv_nsec); return (time_stop.tv_sec - time_start.tv_sec) + 1.0e-9 * (time_stop.tv_nsec - time_start.tv_nsec); } double diff_timespec_milliseconds(struct timespec time_stop, struct timespec time_start){ - //PRINT_DEBUG("\n\nstop.sec:%ld, start.sec:%ld, stop.nsec:%ld, start.nsec:%ld\n\n", time_stop.tv_sec , time_start.tv_sec, time_stop.tv_nsec , time_start.tv_nsec); + //PRINT_DEBUG_("\n\nstop.sec:%ld, start.sec:%ld, stop.nsec:%ld, start.nsec:%ld\n\n", time_stop.tv_sec , time_start.tv_sec, time_stop.tv_nsec , time_start.tv_nsec); return 1.0e3 * (time_stop.tv_sec - time_start.tv_sec) + 1.0e-6 * (time_stop.tv_nsec - time_start.tv_nsec); } long diff_timespec_nanoseconds(struct timespec time_stop, struct timespec time_start){ - //PRINT_DEBUG("\n\nstop.sec:%ld, start.sec:%ld, stop.nsec:%ld, start.nsec:%ld\n\n", time_stop.tv_sec , time_start.tv_sec, time_stop.tv_nsec , time_start.tv_nsec); + //PRINT_DEBUG_("\n\nstop.sec:%ld, start.sec:%ld, stop.nsec:%ld, start.nsec:%ld\n\n", time_stop.tv_sec , time_start.tv_sec, time_stop.tv_nsec , time_start.tv_nsec); return 1.0e9 * (time_stop.tv_sec - time_start.tv_sec) + (time_stop.tv_nsec - time_start.tv_nsec); } diff --git a/ytools_t/src/tools_t/tools_t.h b/ytools_t/src/tools_t/tools_t.h deleted file mode 100644 index 10607a4..0000000 --- a/ytools_t/src/tools_t/tools_t.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef __TOOLS_T_C_H__ -#define __TOOLS_T_C_H__ - -#include -#include -#include -#include -#include - -// to define DEBUG in gcc cli do: gcc -D DEBUG=1 or 0 if need! -#ifndef DEBUG - #define DEBUG 0 -#endif - - -// F_OUT file (stream) to log -#ifndef F_OUT - #define F_OUT stdout -#endif -// F_ERR file (stream) to log -#ifndef F_ERR - #define F_ERR stderr -#endif - - - -/* -#ifndef SECOND - #define SECOND 0 -#endif -#ifndef NANOSECOND - #define NANOSECOND 0 -#endif - -double diff_timespec_seconds(struct timespec time_stop, struct timespec time_start); -double diff_timespec_milliseconds(struct timespec time_stop, struct timespec time_start); -long diff_timespec_nanoseconds(struct timespec time_stop, struct timespec time_start); -*/ - -void gotoxy(int x, int y); -//void get_cursor_position(int *col, int *rows); - - -#define debug_print(fmt, ...) \ - do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ - __LINE__, __func__, __VA_ARGS__); } while (0) - -#define PRINT_DEBUG(fmt, ...) \ - do { if (DEBUG) fprintf(F_ERR, "%s:%d:%s(): " fmt, __FILE__, \ - __LINE__, __func__, __VA_ARGS__); } while (0) - - -#define error_print(fmt, ...) \ - fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ - __LINE__, __func__, __VA_ARGS__); - -#define PRINT_ERROR(fmt, ...) \ - fprintf(F_ERR, "%s:%d:%s(): " fmt, __FILE__, \ - __LINE__, __func__, __VA_ARGS__); - -#define PRINT_LOC_T(fmt, ...) \ - fprintf(F_OUT, "%s:%d:%s(): " fmt, __FILE__, \ - __LINE__, __func__, __VA_ARGS__); - - - -#define TYPE_CHAR char -#define TYPE_U_CHAR unsigned char -#define TYPE_INT int -#define TYPE_U_INT unsigned int -#define TYPE_L_INT long int -#define TYPE_U_L_INT unsigned long int -#define TYPE_SIZE_T size_t -#define TYPE_FLOAT float -#define TYPE_DOUBLE double -#define TYPE_L_DOUBLE long double -#define TYPE_STRING char* - -#define FREE(x) { free((x)); (x) = NULL;} - -#define FOREACH(array, size, function)\ - for(size_t _ind = 0; _ind < size; ++_ind) function(array[_ind]); - - -#define GENERATE_ALL(type)\ - int COMPARE_N_##type(const void *,const void*);\ - void COPY_ARRAY_##type(type* dst, const type* src, size_t size);\ - type MAX_ARRAY_##type(const type *array, size_t size);\ - size_t ARG_MAX_ARRAY_##type(const type *array, size_t size);\ - type MIN_ARRAY_##type(const type *array, size_t size);\ - size_t ARG_MIN_ARRAY_##type(const type *array, size_t size);\ - TYPE_STRING type##_TO_STR(type var);\ - - -GENERATE_ALL(TYPE_CHAR) -GENERATE_ALL(TYPE_U_CHAR) -GENERATE_ALL(TYPE_INT) -GENERATE_ALL(TYPE_U_INT) -GENERATE_ALL(TYPE_L_INT) -GENERATE_ALL(TYPE_U_L_INT) -GENERATE_ALL(TYPE_SIZE_T) -GENERATE_ALL(TYPE_FLOAT) -GENERATE_ALL(TYPE_DOUBLE) -GENERATE_ALL(TYPE_L_DOUBLE) -GENERATE_ALL(TYPE_STRING) - - -/* - * time calucl - */ -double diff_timespec_seconds(struct timespec time_stop, struct timespec time_start); - -double diff_timespec_milliseconds(struct timespec time_stop, struct timespec time_start); - -long diff_timespec_nanoseconds(struct timespec time_stop, struct timespec time_start); - - -#endif /*__TOOLS_T_C_H__*/ -