From 7fba5c5c05ed01230559fa9ad260296ecd28e066 Mon Sep 17 00:00:00 2001 From: fanasina Date: Thu, 26 Oct 2023 09:44:53 +0200 Subject: [PATCH] debug permutation_t: translate set theoric --- include_ytest/include/tools_t/tools_t.h | 11 ++- libytest.so | Bin 294944 -> 294944 bytes permutation_test/compile.sh | 2 +- permutation_test/is_good.c | 85 +++++++++++++++++- .../src/permutation_t/permutation_t.c | 36 ++++---- .../src/permutation_t/permutation_t.h | 4 +- ytools_t/include/tools_t/tools_t.h | 11 ++- 7 files changed, 121 insertions(+), 28 deletions(-) diff --git a/include_ytest/include/tools_t/tools_t.h b/include_ytest/include/tools_t/tools_t.h index e4be195..6f20a20 100644 --- a/include_ytest/include/tools_t/tools_t.h +++ b/include_ytest/include/tools_t/tools_t.h @@ -41,15 +41,22 @@ long diff_timespec_nanoseconds(struct timespec time_stop, struct timespec time_s void gotoxy(int x, int y); //void get_cursor_position(int *col, int *rows); +#if DEBUG #define debug_print(fmt, ...) \ - do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ + 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__, \ + do { /*if (DEBUG)*/ fprintf(F_ERR, "%s:%d:%s(): " fmt, __FILE__, \ __LINE__, __func__, __VA_ARGS__); } while (0) +#else +#define debug_print(fmt, ...) {} + +#define PRINT_DEBUG_(fmt, ...) {} + +#endif #define error_print(fmt, ...) \ fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ diff --git a/libytest.so b/libytest.so index 476fef40e223910b3c9bd28496b0346f33b4c1e6..7acc81b509bb848409643edc757074d11295afc2 100644 GIT binary patch delta 22811 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 QzE_oHeb1{+aC>b2KPj##u>b%7 delta 22782 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 diff --git a/permutation_test/compile.sh b/permutation_test/compile.sh index 80e9ab9..af85642 100644 --- a/permutation_test/compile.sh +++ b/permutation_test/compile.sh @@ -13,7 +13,7 @@ fi -gcc -o launch_is_good_c $1 -L$PWD/../ $2 -lytest -I../include_ytest/include src/permutation_t/permutation_t.o src/set_theoric_t/set_theoric_t.o -I./src +gcc -o launch_is_good_c $1 -L$PWD/../ $2 -lytest -I../include_ytest/include src/permutation_t/permutation_t.c src/set_theoric_t/set_theoric_t.c -I./src #gcc -o launch_is_good_c $1 $2 -lytest -I../include_ytest src/permutation_t/permutation_t.o src/set_theoric_t/set_theoric_t.o -I./src export LD_LIBRARY_PATH=$PWD/../:LD_LIBRARY_PATH diff --git a/permutation_test/is_good.c b/permutation_test/is_good.c index 6de9953..48e3e41 100644 --- a/permutation_test/is_good.c +++ b/permutation_test/is_good.c @@ -12,13 +12,11 @@ #include "ftest/ftest.h" #include "fmock/fmock.h" -#if 1 #include "permutation_t/permutation_t.h" TEST(size_permutation2){ - sleep(4); PRINTF("another size_permutation2 again\n"); ASSERT_TRUE(false); } @@ -29,10 +27,86 @@ TEST(size_permutation) PRINTF(" size = %lu \n",p->size); EXPECT_EQ(p->size, 3); + PRINTF("test size_permutation2\n"); } -#endif + +TEST(permutation_t_float_trans) +{ + int n =8; + PERMUTATION_TYPE_FLOAT *p = CREATE_PERMUTATION_TYPE_FLOAT(n); + + PRINTF(" size = %lu \n",p->size); + EXPECT_EQ(p->size, n); + + p->perm[0]=0.001; + p->perm[1]=0.01; + p->perm[2]=0.00101; + p->perm[3]=0.02; + p->perm[4]=0.1; + p->perm[5]=0.1; + + PERMUTATION_TYPE_SIZE_T *translate_p = TRANSLATE_TO_SET_THEORIC_SIZE_T_TYPE_FLOAT(p); + + for(int i = 0; i < translate_p->size; ++i) PRINTF(" ([%d] %ld) ,",i,translate_p->perm[i]); + PRINTF("\n"); + for(int i = 0; i < p->size; ++i) PRINTF(" (%d: %f) ,",i,p->perm[i]); + PRINTF("\n"); + + +// sleep(n); + +} + +TEST(not_permutation_) +{ + int n =8; + PERMUTATION_TYPE_FLOAT *p = CREATE_PERMUTATION_TYPE_FLOAT(n); + + PRINTF(" size = %lu \n",p->size); + EXPECT_EQ(p->size, n); + + p->perm[0]=0.001; + p->perm[1]=0.01; + p->perm[2]=0.00101; + p->perm[3]=0.02; + p->perm[4]=0.1; + p->perm[5]=0.1; + + EXPECT_FALSE(IS_PERMUTATION_TYPE_FLOAT(p)); + + +// sleep(n); + +} + + + +TEST(is_permutation_) +{ + int n =6; + PERMUTATION_TYPE_FLOAT *p = CREATE_PERMUTATION_TYPE_FLOAT(n); + + PRINTF(" size = %lu \n",p->size); + EXPECT_EQ(p->size, n); + + p->perm[0]=0.001; + p->perm[1]=0.01; + p->perm[2]=0.00101; + p->perm[3]=0.02; + p->perm[4]=0.2; + p->perm[5]=0.1; + + EXPECT_TRUE(IS_PERMUTATION_TYPE_FLOAT(p)); + + +// sleep(n); + +} + + + TEST(size_permutation2){ PRINTF("another size_permutation2 again false\n"); @@ -135,6 +209,7 @@ TEST(){ PRINTF("p_char == %s\n",p_char->perm); } +#if 0 TEST(lessThan){ long int a=1,b=2; EXPECT_LT(a,b); @@ -142,6 +217,7 @@ TEST(lessThan){ } +#if 0 TEST(sleep){sleep(2);} TEST(sleep){sleep(2);} TEST(sleep){sleep(2);} @@ -170,7 +246,6 @@ TEST(sleep){sleep(1);} TEST(sleep){sleep(1);} TEST(sleep){sleep(1);} - TEST(sleep){sleep(1);} TEST(sleep){sleep(1);} TEST(sleep){sleep(1);} @@ -185,6 +260,7 @@ TEST(sleep){sleep(1);} TEST(sleep){sleep(1);} TEST(sleep){sleep(1);} +#endif MOCK_FUNC(int, f_mock, (), ()) @@ -358,6 +434,7 @@ TEST(f7_mock_test){ } +#endif int main(int argc, char **argv){ diff --git a/permutation_test/src/permutation_t/permutation_t.c b/permutation_test/src/permutation_t/permutation_t.c index f6b87f2..d8a2bd1 100644 --- a/permutation_test/src/permutation_t/permutation_t.c +++ b/permutation_test/src/permutation_t/permutation_t.c @@ -7,14 +7,21 @@ type j;\ size_t *count_array_i = calloc(size, sizeof(size_t));\ if(count_array_i == NULL){\ - printf("can't alloc count_array_i\n"); return false;}\ + printf("can't alloc count_array_i\n"); \ + return false;\ + }\ for(size_t i = 0; i < size; ++i){\ j = p->perm[i];\ if((COMPARE_N_##type(&j, (type*)&size) >= 0) || count_array_i[j]){\ - free(count_array_i); return false; }\ - ++count_array_i[j];}\ + free(count_array_i); \ + return false;\ + }\ + ++count_array_i[j];\ + }\ free(count_array_i);\ - return true; }\ + return true; \ + }\ + GENERATE_PERMUTATION_FUNCTIONS_UNSIGNED(TYPE_U_CHAR) GENERATE_PERMUTATION_FUNCTIONS_UNSIGNED(TYPE_U_INT) @@ -40,24 +47,15 @@ GENERATE_PERMUTATION_FUNCTIONS_UNSIGNED(TYPE_SIZE_T) type *sorted_perm = malloc(size * sizeof(type));\ COPY_ARRAY_##type(sorted_perm,(const type*)p->perm, size);\ qsort(sorted_perm, size, sizeof(type), COMPARE_N_##type);\ - size_t *rec_index_visited = malloc(size * sizeof(size_t));\ - size_t cur_rec = 0; bool found_rec;\ - for(size_t i = 0; i < size; ++i){\ - for(size_t j = 0; j < size; ++j){\ + for(size_t i=0; i< size; ++i)\ + PRINT_DEBUG_("sorted_perm[%ld] : %s \n",i, type##_TO_STR(sorted_perm[i]));\ + for(size_t j = 0; j < size; ++j){\ + for(size_t i = 0; i < size; ++i){\ if(COMPARE_N_##type(&(p->perm[j]), &(sorted_perm[i])) == 0){\ - found_rec = false;\ - for(size_t k = 0; k < cur_rec; ++k){\ - if(rec_index_visited[k] == j){\ - found_rec == true; break; } } \ - if(found_rec == false){\ - /*t_p->perm[i] = j;*/\ - t_p->perm[j] = i;\ - rec_index_visited[cur_rec++] = j; \ - break; }\ + t_p->perm[j]=i; break;\ }\ }\ }\ - free(rec_index_visited);\ free(sorted_perm);\ return t_p; \ }\ @@ -94,6 +92,8 @@ GENERATE_PERMUTATION_FUNCTIONS(TYPE_STRING) *it is equivalent of 1,3,2,0 in set_theoric(4)=0,1,2,3 this function calculate the permutation equivalent in set_theoric 2,4,2,5 is translate to 0,1,0,2 + 2,4,7,5 is translate to 0,1,3,2 + PERMUTATION_TYPE_SIZE_T * TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(const PERMUTATION_##type *p ); * */ diff --git a/permutation_test/src/permutation_t/permutation_t.h b/permutation_test/src/permutation_t/permutation_t.h index 2b27ca0..3bfd566 100644 --- a/permutation_test/src/permutation_t/permutation_t.h +++ b/permutation_test/src/permutation_t/permutation_t.h @@ -13,12 +13,14 @@ #define GENERATE_PERMUTATION(type)\ struct PERMUTATION_##type{\ size_t size;\ + size_t rank;\ type * perm; \ };\ \ typedef struct PERMUTATION_##type PERMUTATION_##type;\ PERMUTATION_##type * CREATE_PERMUTATION_##type(size_t size);\ -PERMUTATION_TYPE_SIZE_T * TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(const PERMUTATION_##type *p );\ + PERMUTATION_TYPE_SIZE_T * TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(const PERMUTATION_##type *p );\ + bool IS_PERMUTATION_##type(const PERMUTATION_##type *p );\ GENERATE_PERMUTATION(TYPE_SIZE_T) diff --git a/ytools_t/include/tools_t/tools_t.h b/ytools_t/include/tools_t/tools_t.h index e4be195..6f20a20 100644 --- a/ytools_t/include/tools_t/tools_t.h +++ b/ytools_t/include/tools_t/tools_t.h @@ -41,15 +41,22 @@ long diff_timespec_nanoseconds(struct timespec time_stop, struct timespec time_s void gotoxy(int x, int y); //void get_cursor_position(int *col, int *rows); +#if DEBUG #define debug_print(fmt, ...) \ - do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \ + 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__, \ + do { /*if (DEBUG)*/ fprintf(F_ERR, "%s:%d:%s(): " fmt, __FILE__, \ __LINE__, __func__, __VA_ARGS__); } while (0) +#else +#define debug_print(fmt, ...) {} + +#define PRINT_DEBUG_(fmt, ...) {} + +#endif #define error_print(fmt, ...) \ fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \