diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1377554 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.swp diff --git a/isgood b/isgood index 0045f4a..2e6a955 100644 Binary files a/isgood and b/isgood differ diff --git a/src/test_t/is_good.c b/src/test_t/is_good.c index 1bf676f..69b7925 100644 --- a/src/test_t/is_good.c +++ b/src/test_t/is_good.c @@ -39,16 +39,27 @@ TEST(size_permutation2) else print_KO_with_msg_endl("NOT GOOD test size not passed "); */ } -TEST(size_permutation2){ +TEST(float_equal){ printf("another size_permutation2 float\n"); ASSERT_TRUE(true); - float a = 1.1; - float b = 1.1; + float a = 1.00001f; + float b = 1.00001f; ASSERT_EQ_TYPE_FLOAT(a,b); - b=1.10001; + b=1.0000101f; ASSERT_EQ_TYPE_FLOAT(a,b); - ASSERT_EQ_TYPE_FLOAT(1.2,b); + ASSERT_EQ_TYPE_FLOAT(1.0000102f,b); } +TEST(double_equal){ + printf("another size_permutation2 double\n"); + ASSERT_TRUE(true); + double a = 1.00000001; + double b = 1.00000001; + ASSERT_EQ_TYPE_DOUBLE(a,b); + b=1.0000000101; + ASSERT_EQ_TYPE_DOUBLE(a,b); + ASSERT_EQ_TYPE_DOUBLE(1.0000000102,b); +} + TEST(){ unsigned char c = 'a'; @@ -58,6 +69,15 @@ TEST(){ ASSERT_TRUE(true); } +TEST(){ + int a = 5; + long b = 5; + ASSERT_EQ(a,b); + a=4; + ASSERT_EQ(a,b); + +} + //END_TEST(size_permutation) //INIT() diff --git a/src/test_t/test_t.c b/src/test_t/test_t.c index d115cac..0da727a 100644 --- a/src/test_t/test_t.c +++ b/src/test_t/test_t.c @@ -89,20 +89,20 @@ ASSERT_EXPECT_FROM(true,false) ASSERT_EXPECT_FROM(false,true) #define ASSERT_EQ_TYPE(type)\ -bool assert_eq_##type(type var1, type var2, \ - const char *var1_name, const char *var2_name, const char *func_name){ \ - if(COMPARE_N_##type(&var1, &var2) == 0){ \ - INCR_PASS_CNT; \ - printHK_color(GREEN_K,HK_TR," 1 test passed from %s \n\n",func_name); \ - return true; \ - }else { \ - INCR_FAIL_CNT; \ - printHK_color(RED_K,HK_TR," 1 test failed from %s \n",func_name); \ - append_failed_list(func_name); \ - printf("Expected equality of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n"\ - ,var1_name, type##_TO_STR(var1), var2_name, type##_TO_STR(var1)); \ - return false; \ - } \ +bool assert_eq_##type(type var1, type var2, \ + const char *var1_name, const char *var2_name, const char *func_name){ \ + if(COMPARE_N_##type(&var1, &var2) == 0){ \ + INCR_PASS_CNT; \ + printHK_color(GREEN_K,HK_TR," 1 test passed from %s \n\n",func_name); \ + return true; \ + }else { \ + INCR_FAIL_CNT; \ + printHK_color(RED_K,HK_TR," 1 test failed from %s \n",func_name); \ + append_failed_list(func_name); \ + printf("Expected equality of these values:\n %s\n\tWhich is: %s\n %s\n\tWhich is: %s\n\n" \ + ,var1_name, type##_TO_STR(var1), var2_name, type##_TO_STR(var2)); \ + return false; \ + } \ } ASSERT_EQ_TYPE(TYPE_CHAR) @@ -118,6 +118,7 @@ ASSERT_EQ_TYPE(TYPE_L_DOUBLE) ASSERT_EQ_TYPE(TYPE_STRING) + void append_func(void (*run)(void), char *name){ static struct func *f_static = NULL; diff --git a/src/test_t/test_t.h b/src/test_t/test_t.h index 0c83264..c50c30a 100644 --- a/src/test_t/test_t.h +++ b/src/test_t/test_t.h @@ -9,7 +9,6 @@ #include "src/tools_t/tools_t.h" - struct func { char *name; void (*run)(void); @@ -64,6 +63,7 @@ GEN_ASSERT_EQ_TYPE_FUNC(TYPE_STRING) #define ASSERT_EQ_TYPE_L_DOUBLE(var1, var2) if(assert_eq_TYPE_L_DOUBLE(var1, var2, #var1, #var2, __func__) == false) return ; #define ASSERT_EQ_TYPE_STRING(var1, var2) if(assert_eq_TYPE_STRING(var1, var2, #var1, #var2, __func__) == false) return ; +#define ASSERT_EQ(var1, var2) if(assert_eq_TYPE_L_INT(var1, var2, #var1, #var2, __func__) == false) return ; #define CONCAT(x,y) x ## y diff --git a/src/tools_t/tools_t.c b/src/tools_t/tools_t.c index ed07fed..dea4fb9 100644 --- a/src/tools_t/tools_t.c +++ b/src/tools_t/tools_t.c @@ -15,25 +15,44 @@ GEN_TO_STR_N(TYPE_U_INT,22,"%u") GEN_TO_STR_N(TYPE_L_INT,22,"%ld") GEN_TO_STR_N(TYPE_U_L_INT,22,"%lu") GEN_TO_STR_N(TYPE_SIZE_T,22,"%lu") -GEN_TO_STR_N(TYPE_FLOAT,128,"%f") -GEN_TO_STR_N(TYPE_DOUBLE,256,"%lf") -GEN_TO_STR_N(TYPE_L_DOUBLE,256,"%Lf") +GEN_TO_STR_N(TYPE_FLOAT,128,"%.10f") +GEN_TO_STR_N(TYPE_DOUBLE,256,"%.30lf") +GEN_TO_STR_N(TYPE_L_DOUBLE,256,"%.30Lf") TYPE_STRING TYPE_STRING_TO_STR(TYPE_STRING var){ return var; } -#define MIN_ABS_FLOAT 1 -#define MULT_FLOAT_ERR 100000 +#define PRECISION_TYPE_CHAR 1 +#define PRECISION_TYPE_U_CHAR 1 +#define PRECISION_TYPE_INT 1 +#define PRECISION_TYPE_U_INT 1 +#define PRECISION_TYPE_L_INT 1 +#define PRECISION_TYPE_U_L_INT 1 +#define PRECISION_TYPE_SIZE_T 1 + +// with gcc we can change value of theses PRECISION_TYPES below with: gcc -D PRECISION_TYPE_FLOAT=100000 for instance! +#ifndef PRECISION_TYPE_FLOAT + #define PRECISION_TYPE_FLOAT 100000000 +#endif +#ifndef PRECISION_TYPE_DOUBLE + #define PRECISION_TYPE_DOUBLE 100000000000 +#endif +#ifndef PRECISION_TYPE_L_DOUBLE + #define PRECISION_TYPE_L_DOUBLE 100000000000000 +#endif #define GENERATE_FUNCTION_NUMERIC(type)\ - int COMPARE_N_##type(const void *a, const void *b){ \ - if (abs((*(type*)a - *(type*)b) * MULT_FLOAT_ERR) < MIN_ABS_FLOAT ) return 0; \ - if (*(type*)a > *(type*)b) return 1; \ - return -1; }\ - \ - void COPY_ARRAY_##type(type *dst, const type *src, size_t size){\ - for(size_t i = 0; i < size; ++i) dst[i]=src[i]; }\ + int COMPARE_N_##type(const void *a, const void *b){ \ + type diff = (*(type*)a - *(type*)b)*PRECISION_##type; \ + debug_print(" 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; \ + } \ + \ + void COPY_ARRAY_##type(type *dst, const type *src, size_t size){ \ + for(size_t i = 0; i < size; ++i) dst[i]=src[i]; \ + } \ \ int @@ -105,28 +124,3 @@ GENERATE_FUNCTION_ALL(TYPE_STRING) -/* -int main() -{ - unsigned int ui1 = 2545466; - unsigned int ui2 = 2544566; - printf(" %u >? %u = %d \n",ui1,ui2,COMPARE_N_TYPE_U_INT(&ui1,&ui2)); - printf(" %u >? %u = %d \n",ui1,ui1,COMPARE_N_TYPE_U_INT(&ui1,&ui1)); - printf(" %u >? %u = %d \n",ui2,ui1,COMPARE_N_TYPE_U_INT(&ui2,&ui1)); - int i1 = 2545466; - int i2 = 2544566; - printf(" %d >? %d = %d \n",i1,i2,COMPARE_N_TYPE_U_INT(&i1,&i2)); - printf(" %d >? %d = %d \n",i1,i1,COMPARE_N_TYPE_U_INT(&i1,&i1)); - printf(" %d >? %d = %d \n",i2,i1,COMPARE_N_TYPE_U_INT(&i2,&i1)); - - int tabi[]={5,2,6,4,3,1}; - int tabr[6]={0}; - COPY_ARRAY_TYPE_INT(tabr,tabi,6); - - for(size_t i=0; i<6; ++i) printf(" %d \n", tabr[i]); - - printf("MIN = %d \n",MIN_ARRAY_TYPE_INT(tabr,6)); - - return 0; -}*/ - diff --git a/src/tools_t/tools_t.h b/src/tools_t/tools_t.h index 3f18fce..c952df0 100644 --- a/src/tools_t/tools_t.h +++ b/src/tools_t/tools_t.h @@ -6,6 +6,18 @@ #include #include + +// to define DEBUG in gcc cli do: gcc -D DEBUG=1 or 0 if need! +#ifndef DEBUG + #define DEBUG 0 +#endif + +#define debug_print(fmt, ...) \ + do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ + __LINE__, __func__, __VA_ARGS__); } while (0) + + + #define TYPE_CHAR char #define TYPE_U_CHAR unsigned char #define TYPE_INT int