SETreturnsize_(set,actualSize);/* normally used only when speed is critical */
if(*qh_setendpointer(set)!=NULL){
qh_fprintf(qh,stderr,6344,"%s: qh_setendpointer(set), 0x%x, is not NULL terminator of set 0x%x",name,qh_setendpointer(set),set);
error_count++;
}
}
if(actualSize!=qh_setsize(qh,set)){
qh_fprintf(qh,stderr,6305,"%s: SETreturnsize_(qh) returned %d while qh_setsize(qh) returns %d\n",name,actualSize,qh_setsize(qh,set));
error_count++;
}elseif(actualSize!=count){
qh_fprintf(qh,stderr,6306,"%s: Expecting %d elements for set. Got %d elements\n",name,count,actualSize);
error_count++;
}
if(SETempty_(set)){
if(count!=0){
qh_fprintf(qh,stderr,6307,"%s: Got empty set instead of count %d, rangeA %d, rangeB %d, rangeC %d\n",name,count,rangeA,rangeB,rangeC);
error_count++;
}
}else{
/* Must be first, otherwise trips msvc 8 */
i2T**p=SETaddr_(set,i2T);
if(*p!=SETfirstt_(set,i2T)){
qh_fprintf(qh,stderr,6309,"%s: SETaddr_(set, i2t) [%p] is not the same as SETfirst_(set) [%p]\n",name,SETaddr_(set,i2T),SETfirst_(set));
error_count++;
}
first=*(int*)SETfirst_(set);
if(SETfirst_(set)!=SETfirstt_(set,i2T)){
qh_fprintf(qh,stderr,6308,"%s: SETfirst_(set) [%p] is not the same as SETfirstt_(set, i2T [%p]\n",name,SETfirst_(set),SETfirstt_(set,i2T));
error_count++;
}
if(qh_setsize(qh,set)>1){
second=*(int*)SETsecond_(set);
if(SETsecond_(set)!=SETsecondt_(set,i2T)){
qh_fprintf(qh,stderr,6310,"%s: SETsecond_(set) [%p] is not the same as SETsecondt_(set, i2T) [%p]\n",name,SETsecond_(set),SETsecondt_(set,i2T));
error_count++;
}
}
}
/* Test first run of ints in set*/
i=0;
FOREACHint_(set){
if(i2!=SETfirst_(set)&&*i2!=prev+1){
break;
}
prev=*i2;
if(SETindex_(set,i2)!=i){
qh_fprintf(qh,stderr,6311,"%s: Expecting SETindex_(set, pointer-to-%d) to be %d. Got %d\n",name,*i2,i,SETindex_(set,i2));
error_count++;;
}
if(i2!=SETref_(i2)){
qh_fprintf(qh,stderr,6312,"%s: SETref_(i2) [%p] does not point to i2 (the %d'th element)\n",name,SETref_(i2),i);
error_count++;;
}
i++;
}
FOREACHint_i_(qh,set){
/* Must be first conditional, otherwise it trips up msvc 8 */
i2T**p=SETelemaddr_(set,i2_i,i2T);
if(i2!=*p){
qh_fprintf(qh,stderr,6320,"%s: SETelemaddr_(set, %d, i2T) [%p] does not point to i2\n",name,i2_i,SETelemaddr_(set,i2_i,int));
error_count++;;
}
if(i2_i==0){
if(first!=*i2){
qh_fprintf(qh,stderr,6314,"%s: First element is %d instead of SETfirst %d\n",name,*i2,first);
error_count++;;
}
if(rangeA!=*i2){
qh_fprintf(qh,stderr,6315,"%s: starts with %d instead of rangeA %d\n",name,*i2,rangeA);
error_count++;;
}
prev=rangeA;
}else{
if(i2_i==1&&second!=*i2){
qh_fprintf(qh,stderr,6316,"%s: Second element is %d instead of SETsecond %d\n",name,*i2,second);
error_count++;;
}
if(prev+1==*i2){
prev++;
}else{
if(*i2==rangeB){
prev=rangeB;
rangeB=-1;
rangeCount++;
}elseif(rangeB==-1&&*i2==rangeC){
prev=rangeC;
rangeC=-1;
rangeCount++;
}else{
prev++;
qh_fprintf(qh,stderr,6317,"%s: Expecting %d'th element to be %d. Got %d\n",name,i2_i,prev,*i2);
error_count++;
}
}
}
if(i2!=SETelem_(set,i2_i)){
qh_fprintf(qh,stderr,6318,"%s: SETelem_(set, %d) [%p] is not i2 [%p] (the %d'th element)\n",name,i2_i,SETelem_(set,i2_i),i2,i2_i);
error_count++;;
}
if(SETelemt_(set,i2_i,i2T)!=SETelem_(set,i2_i)){/* Normally SETelemt_ is used for generic sets */
qh_fprintf(qh,stderr,6319,"%s: SETelemt_(set, %d, i2T) [%p] is not SETelem_(set, %d) [%p] (the %d'th element)\n",name,i2_i,SETelemt_(set,i2_i,int),i2_i,SETelem_(set,i2_i),i2_i);
error_count++;;
}
}
if(error_count>=MAXerrorCount){
qh_fprintf(qh,stderr,8011,"testqset: Stop testing after %d errors\n",error_count);