diff --git a/ypermutation_t/Makefile b/ypermutation_t/Makefile index 372f924..6490281 100644 --- a/ypermutation_t/Makefile +++ b/ypermutation_t/Makefile @@ -2,7 +2,7 @@ CC=gcc TOOLDIR=$(PWD)/../ytools_t -INCLUDE_DIR=$(TOOLDIR)/src +INCLUDE_DIR=$(TOOLDIR)/include CFLAGS=-I$(INCLUDE_DIR) -I./src #SRC_DIR=$(ROOT_DIR)/src diff --git a/ypermutation_t/src/permutation_t/permutation_t.c b/ypermutation_t/src/permutation_t/permutation_t.c index e31cbd8..f3c3073 100644 --- a/ypermutation_t/src/permutation_t/permutation_t.c +++ b/ypermutation_t/src/permutation_t/permutation_t.c @@ -121,7 +121,7 @@ size_t TabToPlaceOpt1_##type(const PERMUTATION_##type *p){\ }\ else if (mx > tb[i]) {\ size_t pli = 0; /* si c est le plus à droite 0 si pas de superieur à lui, on incremente si on trouve plus petit*/\ - for (size_t j = sz - 1; j > i; j--) {\ + for (long int j = sz - 1; j > i; j--) {\ if (tb[i] > tb[j]) {\ pli++;\ }\ @@ -174,12 +174,19 @@ size_t TabToPlaceNotab_##type(const PERMUTATION_##type *p){\ /*complexité sz*sz/2 */\ PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl){\ size_t sz = p->size;\ - PERMUTATION_TYPE_SIZE_T *t_p = CREATE_PERMUTATION_TYPE_SIZE_T(sz);\ - size_t *tb= t_p->perm;\ + /*PERMUTATION_TYPE_SIZE_T *t_p = CREATE_PERMUTATION_TYPE_SIZE_T(sz);*/\ + PERMUTATION_TYPE_SIZE_T *t_p = TRANSLATE_TO_SET_THEORIC_SIZE_T_##type(p);\ + type *save_perm = malloc(sz*sizeof(type));\ + long int *tb= t_p->perm;\ size_t a = pl;\ size_t pltbi;\ - size_t size = 1;\ - for (long int i = 0;i < sz;i++) tb[i] = 0;\ + /*size_t size = 1;*/\ + for (long int i = 0;i < sz;i++) {\ + /*tb[i] = 0;*/\ + save_perm[tb[i]]=p->perm[i];\ + PRINT_DEBUG_("%ld => %s \n",tb[i],type##_TO_STR(p->perm[i]));\ + tb[i]=0;\ + }\ \ for (long int i = sz - 1; i >= 0; i--) {\ pltbi = a % (i + 1);\ @@ -188,7 +195,7 @@ PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl){\ tb[sz - 1 - pltbi] = i;\ }\ else {\ - size_t lt = 0, j = sz - 1;\ + long int lt = 0, j = sz - 1;\ while (lt < pltbi && j >= 0) {\ if (tb[j--] < i) {\ lt++;\ @@ -201,7 +208,8 @@ PERMUTATION_TYPE_SIZE_T * PlaceToTab_##type(PERMUTATION_##type *p, size_t pl){\ }\ }\ \ - for (long int i = 0;i < sz;i++) p->perm[i] = p->perm[tb[i]];\ + /*for (long int i = 0;i < sz;i++) p->perm[i] = save_perm[tb[i]];*/\ + for (long int i = 0;i < sz;i++) p->perm[i] = save_perm[tb[i]];\ return t_p;\ }\ \ diff --git a/ypermutation_t/test/is_good.c b/ypermutation_t/test/is_good.c index d2f62af..56b6c7d 100644 --- a/ypermutation_t/test/is_good.c +++ b/ypermutation_t/test/is_good.c @@ -157,30 +157,51 @@ TEST(){ TEST(){ PERMUTATION_TYPE_CHAR *p_char = CREATE_PERMUTATION_TYPE_CHAR(6); + /* p_char->perm[0]='B'; p_char->perm[1]='A'; p_char->perm[2]='Y'; p_char->perm[3]='C'; p_char->perm[4]='D'; p_char->perm[5]='Z'; - +*/ + p_char->perm[0]='6'; + p_char->perm[1]='1'; + p_char->perm[2]='2'; + p_char->perm[3]='3'; + p_char->perm[4]='4'; + p_char->perm[5]='5'; + p_char->perm[6]='\0'; PRINTF("init :%s \n",p_char->perm); PERMUTATION_TYPE_SIZE_T *tab_45 = TRANSLATE_TO_SET_THEORIC_SIZE_T_TYPE_CHAR(p_char); for(size_t i=0; isize; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]); + // size_t pl = TabToPlaceAlgo_TYPE_CHAR(p_char); //size_t pl = TabToPlaceOpt1_TYPE_CHAR(p_char); PRINTF("sa place est :%ld \n", pl); + long int rank=450-1; + /* in the article the rank is between 1 to n! , here the rank is between 0 to n! -1 */ + tab_45 = PlaceToTab_TYPE_CHAR(p_char, rank); - tab_45 = PlaceToTab_TYPE_CHAR(p_char, pl+1); + char * expect_res="652413"; + /*EXPECT_EQ_TYPE_STRING("652413", expect_res);*/ /* the base is 1,2,3,4,5,6 */ + EXPECT_EQ_TYPE_STRING(expect_res, p_char->perm); /* the base is 1,2,3,4,5,6 */ + + /* + * for(size_t i=0; isize; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]); + PRINTF("ret %ld :%s \n",rank,p_char->perm); + + for(long int j=0; j<6; ++j){ + tab_45 = PlaceToTab_TYPE_CHAR(p_char, j); + + for(size_t i=0; isize; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]); + PRINTF("ret %ld :%s \n",j,p_char->perm); + } + */ - for(size_t i=0; isize; ++i) PRINTF(" %ld: %ld \n",i, tab_45->perm[i]); -/* tab_45 = PlaceToTab_TYPE_CHAR(p_char,45); - PRINTF("ret :%s \n",p_char->perm); - for(size_t i=0; iperm[i]); -*/ } #if 0 diff --git a/ytest_t/libytest.so b/ytest_t/libytest.so index 16d12e9..8eebb25 100644 Binary files a/ytest_t/libytest.so and b/ytest_t/libytest.so differ diff --git a/ytools_t/src/tools_t/tools_t.c b/ytools_t/src/tools_t/tools_t.c index 16f3aa7..0e58668 100644 --- a/ytools_t/src/tools_t/tools_t.c +++ b/ytools_t/src/tools_t/tools_t.c @@ -102,8 +102,10 @@ 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); - return strcmp(( char*)a,( char*)b); + char **aa=(char**)a; + char **bb=(char**)b; + PRINT_DEBUG_("a=%s, b=%s\n",*aa, *bb); + return strcmp(*aa,*bb); } void COPY_ARRAY_TYPE_STRING(char** dst, const char** src, size_t size)