TEST(ExpressionAlgoIsSubsetOf, Compare_GT_GTE) { ParsedMatchExpression gte6("{x: {$gte: 6}}"); ParsedMatchExpression gt5("{x: {$gt: 5}}"); ParsedMatchExpression gte5("{x: {$gte: 5}}"); ParsedMatchExpression gt4("{x: {$gt: 4}}"); ASSERT_TRUE(expression::isSubsetOf(gte6.get(), gte5.get())); ASSERT_TRUE(expression::isSubsetOf(gt5.get(), gte5.get())); ASSERT_TRUE(expression::isSubsetOf(gte5.get(), gte5.get())); ASSERT_FALSE(expression::isSubsetOf(gt4.get(), gte5.get())); ASSERT_TRUE(expression::isSubsetOf(gte6.get(), gt5.get())); ASSERT_TRUE(expression::isSubsetOf(gt5.get(), gt5.get())); ASSERT_FALSE(expression::isSubsetOf(gte5.get(), gt5.get())); ASSERT_FALSE(expression::isSubsetOf(gt4.get(), gt5.get())); }
static int* makeCperm(int ntot,int*np,int*perm) { int i,bPow,nc; int pc[MAXINOUT]; int *chains; int * res; for(i=0;i<ntot;i++) { pc[i]=prtclbase[np[i]-1].cdim; if(i<nin && pc[i]!=1 && pc[i]!=8) pc[i]*=-1; } bPow=infCbases(ntot,pc,&nC,&chains); //printf(" Ibasis: "); for(i=0;i<bPow*nC*4;i++) printf("%d ",chains[i]); printf("\n"); res=malloc(sizeof(int)*(bPow+1)); res[0]=bPow; if(bPow>0) { int*chains2=malloc(sizeof(int)*nC*bPow*4); memcpy(chains2,chains,nC*bPow*4*sizeof(int)); { int j,k,l; for(k=0;k<4*nC*bPow;k++) if(k%4 && chains2[k]) chains2[k]=perm[chains2[k]-1]+1; //printf(" Pbasis: "); for(i=0;i<bPow*nC*4;i++) printf("%d ",chains2[i]); printf("\n"); for(l=0;l<bPow*nC;l++) { int * c=chains2+4*l; if(abs(c[0])==3) { int b; if(c[1]>c[2]) { b=c[1];c[1]=c[2];c[2]=b;} if(c[2]>c[3]) { b=c[2];c[2]=c[3];c[3]=b;} if(c[1]>c[2]) { b=c[1];c[1]=c[2];c[2]=b;} if(c[2]>c[3]) { b=c[2];c[2]=c[3];c[3]=b;} } } for(l=0;l<bPow;l++) { int l2; int * c=chains2+4*l*nC; k=0; while(k<nC-1) if(gt4(c+4*k,c+4*k+4) ) { int buff[4]; memcpy(buff, c+4*k, 4*sizeof(int)); memcpy(c+4*k, c+4*k+4,4*sizeof(int)); memcpy(c+4*k+4,buff, 4*sizeof(int)); if(k>0) k--;else k++; } else k++; for(l2=0;l2<bPow;l2++) if(memcmp(chains+4*nC*l2,c,4*nC*sizeof(int))==0) { res[l+1]=l2+1; break; } if(l2==bPow) fprintf(stderr,"Can not construct permutation\n"); } //printf(" Sbasis: "); for(i=0;i<bPow*nC*4;i++) printf("%d ",chains2[i]); printf("\n"); } free(chains2); } return res; }