xref: /petsc/src/sys/tests/ex41.c (revision b122ec5aa1bd4469eb4e0673542fb7de3f411254)
1c4762a1bSJed Brown static char help[] = "Test PETSc integer hash set.\n\n";
2c4762a1bSJed Brown 
3c4762a1bSJed Brown #include <petsc/private/hashseti.h>
4c4762a1bSJed Brown #include <petscsys.h>
5c4762a1bSJed Brown 
62c71b3e2SJacob Faibussowitsch #define PetscTestCheck(expr) PetscCheck(expr,PETSC_COMM_SELF,PETSC_ERR_LIB,"Assertion: `%s' failed.",PetscStringize(expr))
7c4762a1bSJed Brown 
8c4762a1bSJed Brown int main(int argc,char **argv)
9c4762a1bSJed Brown {
10c4762a1bSJed Brown   PetscHSetI     ht = NULL, hd;
11c4762a1bSJed Brown   PetscInt       n, off, array[4],na,nb,i,*marray,size;
12c4762a1bSJed Brown   PetscBool      has, flag;
13c4762a1bSJed Brown 
14*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscInitialize(&argc,&argv,NULL,help));
15c4762a1bSJed Brown 
165f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetICreate(&ht));
172c71b3e2SJacob Faibussowitsch   PetscTestCheck(ht != NULL);
185f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
192c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 0);
20c4762a1bSJed Brown 
215f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIResize(ht,0));
225f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
232c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 0);
24c4762a1bSJed Brown 
255f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIHas(ht,42,&has));
262c71b3e2SJacob Faibussowitsch   PetscTestCheck(has == PETSC_FALSE);
27c4762a1bSJed Brown 
285f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIAdd(ht,42));
295f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
302c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 1);
315f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIHas(ht,42,&has));
322c71b3e2SJacob Faibussowitsch   PetscTestCheck(has == PETSC_TRUE);
33c4762a1bSJed Brown 
345f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDel(ht,42));
355f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
362c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 0);
375f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIHas(ht,42,&has));
382c71b3e2SJacob Faibussowitsch   PetscTestCheck(has == PETSC_FALSE);
395f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDel(ht,42));
405f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDel(ht,24));
41c4762a1bSJed Brown 
425f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIQueryAdd(ht,123,&flag));
432c71b3e2SJacob Faibussowitsch   PetscTestCheck(flag == PETSC_TRUE);
445f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIQueryAdd(ht,123,&flag));
452c71b3e2SJacob Faibussowitsch   PetscTestCheck(flag == PETSC_FALSE);
465f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIQueryDel(ht,123,&flag));
472c71b3e2SJacob Faibussowitsch   PetscTestCheck(flag == PETSC_TRUE);
485f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIQueryDel(ht,123,&flag));
492c71b3e2SJacob Faibussowitsch   PetscTestCheck(flag == PETSC_FALSE);
50c4762a1bSJed Brown 
515f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIResize(ht,13));
525f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
532c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 0);
54c4762a1bSJed Brown 
555f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIClear(ht));
565f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
572c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 0);
58c4762a1bSJed Brown 
595f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIAdd(ht,42));
605f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIAdd(ht,13));
615f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
622c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 2);
63c4762a1bSJed Brown 
64c4762a1bSJed Brown   off = 0;
655f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetElems(ht,&off,array));
665f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSortInt(off,array));
672c71b3e2SJacob Faibussowitsch   PetscTestCheck(off == 2);
682c71b3e2SJacob Faibussowitsch   PetscTestCheck(array[0] == 13);
692c71b3e2SJacob Faibussowitsch   PetscTestCheck(array[1] == 42);
705f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetElems(ht,&off,array));
715f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSortInt(2,array+2));
722c71b3e2SJacob Faibussowitsch   PetscTestCheck(off == 4);
732c71b3e2SJacob Faibussowitsch   PetscTestCheck(array[0] == 13);
742c71b3e2SJacob Faibussowitsch   PetscTestCheck(array[1] == 42);
752c71b3e2SJacob Faibussowitsch   PetscTestCheck(array[0] == 13);
762c71b3e2SJacob Faibussowitsch   PetscTestCheck(array[1] == 42);
77c4762a1bSJed Brown 
78c4762a1bSJed Brown   off = 0;
795f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDuplicate(ht,&hd));
805f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetElems(hd,&off,array));
815f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSortInt(off,array));
822c71b3e2SJacob Faibussowitsch   PetscTestCheck(off == 2);
832c71b3e2SJacob Faibussowitsch   PetscTestCheck(array[0] == 13);
842c71b3e2SJacob Faibussowitsch   PetscTestCheck(array[1] == 42);
855f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDestroy(&hd));
86c4762a1bSJed Brown 
875f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIAdd(ht,0));
885f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
892c71b3e2SJacob Faibussowitsch   PetscTestCheck(n != 0);
905f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIReset(ht));
915f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
922c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 0);
935f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIReset(ht));
945f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
952c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 0);
965f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIAdd(ht,0));
975f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
982c71b3e2SJacob Faibussowitsch   PetscTestCheck(n != 0);
99c4762a1bSJed Brown 
1005f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDestroy(&ht));
1012c71b3e2SJacob Faibussowitsch   PetscTestCheck(ht == NULL);
102c4762a1bSJed Brown 
1035f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetICreate(&ht));
1045f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIReset(ht));
1055f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&n));
1062c71b3e2SJacob Faibussowitsch   PetscTestCheck(n == 0);
1075f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDestroy(&ht));
108c4762a1bSJed Brown 
1095f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetICreate(&ht));
1105f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetICreate(&hd));
111c4762a1bSJed Brown   n = 10;
1125f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIResize(ht,n));
1135f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIResize(hd,n));
1145f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetCapacity(ht,&na));
1155f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetCapacity(hd,&nb));
1162c71b3e2SJacob Faibussowitsch   PetscTestCheck(na>=n);
1172c71b3e2SJacob Faibussowitsch   PetscTestCheck(nb>=n);
118c4762a1bSJed Brown   for (i=0; i<n; i++) {
1195f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscHSetIAdd(ht,i+1));
1205f80ce2aSJacob Faibussowitsch     CHKERRQ(PetscHSetIAdd(hd,i+1+n));
121c4762a1bSJed Brown   }
1225f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetCapacity(ht,&nb));
1232c71b3e2SJacob Faibussowitsch   PetscTestCheck(nb>=na);
124c4762a1bSJed Brown   /* Merge ht and hd, and the result is in ht */
1255f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIUpdate(ht,hd));
1265f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDestroy(&hd));
1275f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetSize(ht,&size));
1282c71b3e2SJacob Faibussowitsch   PetscTestCheck(size==(2*n));
1295f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscMalloc1(n*2,&marray));
130c4762a1bSJed Brown   off = 0;
1315f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIGetElems(ht,&off,marray));
1325f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscHSetIDestroy(&ht));
1332c71b3e2SJacob Faibussowitsch   PetscTestCheck(off==(2*n));
1345f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscSortInt(off,marray));
135c4762a1bSJed Brown   for (i=0; i<n; i++) {
1362c71b3e2SJacob Faibussowitsch     PetscTestCheck(marray[i]==(i+1));
1372c71b3e2SJacob Faibussowitsch     PetscTestCheck(marray[n+i]==(i+1+n));
138c4762a1bSJed Brown   }
1395f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscFree(marray));
140c4762a1bSJed Brown 
141*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscFinalize());
142*b122ec5aSJacob Faibussowitsch   return 0;
143c4762a1bSJed Brown }
144c4762a1bSJed Brown 
145c4762a1bSJed Brown /*TEST
146c4762a1bSJed Brown 
147c4762a1bSJed Brown    test:
148c4762a1bSJed Brown 
149c4762a1bSJed Brown TEST*/
150