add print and sprint tensor and split dim end tensor
This commit is contained in:
@@ -121,6 +121,30 @@ dimension* sub_dim_tail(dimension *root, size_t subdim){
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
void split_dim_part(dimension *root, dimension **part_1, dimension **part_2, size_t sz_nb_minus_part ) */
|
||||
void split_dim_part(dimension *root, dimension **part_1, dimension **part_2, size_t pivotSplit, size_t rangeInPivot ) {
|
||||
if(pivotSplit < root->size){
|
||||
if(rangeInPivot < root->perm[pivotSplit]){
|
||||
//size_t sz_part1= (root->rank * sz_nb_minus_part)/(root->perm[(root->size)-1]);
|
||||
//printf("sz_part1 :%ld \n",sz_part1);
|
||||
*part_1 = init_copy_dim(root->perm, root->size);
|
||||
((*part_1)->perm[pivotSplit]) -= rangeInPivot;
|
||||
updateRankDim(*part_1);
|
||||
/*if(sz_nb_minus_part <2)
|
||||
*part_2 = init_copy_dim((root->perm), root->size-1 );
|
||||
else{*/
|
||||
*part_2 = init_copy_dim((root->perm), root->size );
|
||||
(*part_2)->perm[pivotSplit] = rangeInPivot ;
|
||||
//}
|
||||
updateRankDim(*part_2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void add_dimension(dimension **d, dimension *d0, dimension *d1) {
|
||||
(*d) = create_dim(d0->size + d1->size);
|
||||
for (size_t i = 0; i < d0->size; i++) (*d)->perm[i] = d0->perm[i];
|
||||
@@ -146,10 +170,13 @@ void min_dimension(dimension **d, dimension *d0, dimension *d1) {
|
||||
|
||||
void printDebug_dimension(dimension *d,char *msg){
|
||||
|
||||
printf("%s / dim->size = %ld | dim->rank = %ld \n",msg,d->size,d->rank);
|
||||
printf("(%s)->size = %ld | (%s)->rank = %ld \n",msg,d->size,msg,d->rank);
|
||||
for(size_t i=0; i<d->size; ++i)
|
||||
printf("[%ld: %ld] |", i,d->perm[i]);
|
||||
printf("\n");
|
||||
if(endian)
|
||||
printf("litle endian (true)\n");
|
||||
else
|
||||
printf("litle endian (false) \n");
|
||||
}
|
||||
|
||||
void updateRankDim(dimension *dim){
|
||||
|
||||
@@ -5,6 +5,15 @@
|
||||
|
||||
extern bool endian;
|
||||
|
||||
|
||||
bool isLessEqThan(long int a, long int b) ;
|
||||
bool isLessThan(long int a, long int b) ;
|
||||
bool isGreatEqThan(long int a, long int b) ;
|
||||
bool isGreatThan(long int a, long int b) ;
|
||||
long int incr(long int i) ;
|
||||
long int decr(long int i) ;
|
||||
|
||||
|
||||
typedef struct PERMUTATION_TYPE_SIZE_T dimension ;
|
||||
|
||||
dimension * create_dim(size_t size);
|
||||
@@ -22,6 +31,8 @@ dimension* sub_copy_minus_dim_tail(dimension *t, size_t minusSubdim);
|
||||
dimension* sub_copy_dim_head(dimension *t, size_t sub_copydim);
|
||||
dimension* sub_copy_dim_tail(dimension *t, size_t sub_copydim);
|
||||
|
||||
void split_dim_part(dimension *root, dimension **part_1, dimension **part_2, size_t pivotSplit, size_t rangeInPivot );
|
||||
|
||||
void add_copy_dimension(dimension **d, dimension *d0, dimension *d1);
|
||||
void min_copy_dimension(dimension **d, dimension *d0, dimension *d1);
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ TEST(dimension0){
|
||||
|
||||
EXPECT_EQ(D->size,5);
|
||||
|
||||
free_dimension(D);
|
||||
}
|
||||
TEST(rank){
|
||||
dimension *D=create_dim(4);
|
||||
@@ -33,7 +34,71 @@ TEST(rank){
|
||||
updateRankDim(D);
|
||||
EXPECT_EQ(D->rank, 180);
|
||||
|
||||
free_dimension(D);
|
||||
}
|
||||
TEST(SplitDim){
|
||||
dimension *D=create_dim(4);
|
||||
D->perm[0]=2;
|
||||
D->perm[1]=3;
|
||||
D->perm[2]=5;
|
||||
D->perm[3]=6;
|
||||
|
||||
updateRankDim(D);
|
||||
printDebug_dimension(D," D root");
|
||||
|
||||
dimension *d_part1 = NULL,*d_part2=NULL;
|
||||
|
||||
split_dim_part(D, &d_part1, &d_part2, 1, 2);
|
||||
|
||||
printDebug_dimension(d_part1," part1 from Root");
|
||||
printDebug_dimension(d_part2," part2 from Root");
|
||||
|
||||
dimension *ad;
|
||||
|
||||
add_dimension(&ad,d_part1, d_part2);
|
||||
printDebug_dimension(D," D root");
|
||||
printDebug_dimension(ad," ad ");
|
||||
|
||||
|
||||
free_dimension(D);
|
||||
free_dimension(ad);
|
||||
free(d_part1);
|
||||
free(d_part2);
|
||||
}
|
||||
|
||||
TEST(SplitDim_2){
|
||||
dimension *D=create_dim(4);
|
||||
D->perm[0]=2;
|
||||
D->perm[1]=3;
|
||||
D->perm[2]=5;
|
||||
D->perm[3]=6;
|
||||
|
||||
updateRankDim(D);
|
||||
printDebug_dimension(D," D root");
|
||||
|
||||
dimension *d_part1 = NULL,*d_part2=NULL;
|
||||
|
||||
split_dim_part(D, &d_part1, &d_part2, 3, 2);
|
||||
|
||||
printDebug_dimension(d_part1," part1 from Root");
|
||||
printDebug_dimension(d_part2," part2 from Root");
|
||||
|
||||
dimension *ad;
|
||||
|
||||
add_dimension(&ad,d_part1, d_part2);
|
||||
printDebug_dimension(D," D root");
|
||||
printDebug_dimension(ad," ad ");
|
||||
|
||||
|
||||
free_dimension(D);
|
||||
free_dimension(ad);
|
||||
free(d_part1);
|
||||
free(d_part2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
TEST(SubDim){
|
||||
dimension *D=create_dim(4);
|
||||
D->perm[0]=2;
|
||||
@@ -49,6 +114,9 @@ TEST(SubDim){
|
||||
dimension *d_tail2 = sub_minus_dim_tail(D,2);
|
||||
EXPECT_EQ(d_tail2->rank, 5*6);
|
||||
|
||||
free_dimension(D);
|
||||
free(d_tail2);
|
||||
free(d_head2);
|
||||
}
|
||||
|
||||
TEST(SubDim){
|
||||
@@ -67,6 +135,9 @@ TEST(SubDim){
|
||||
dimension *d_tail2 = sub_minus_dim_tail(D,2);
|
||||
EXPECT_EQ(d_tail2->rank, 5*6);
|
||||
|
||||
free_dimension(D);
|
||||
free(d_tail2);
|
||||
free(d_head2);
|
||||
}
|
||||
|
||||
TEST(Coord_linear){
|
||||
@@ -86,6 +157,8 @@ TEST(Coord_linear){
|
||||
}
|
||||
|
||||
EXPECT_EQ(line, LineFromCoord(coord, D));
|
||||
free_dimension(D);
|
||||
free(coord);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv){
|
||||
|
||||
Reference in New Issue
Block a user