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
main(int argc,char ** argv)8d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
9d71ae5a4SJacob Faibussowitsch {
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
14327415f7SBarry Smith PetscFunctionBeginUser;
159566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help));
16c4762a1bSJed Brown
179566063dSJacob Faibussowitsch PetscCall(PetscHSetICreate(&ht));
182c71b3e2SJacob Faibussowitsch PetscTestCheck(ht != NULL);
199566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
202c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0);
21c4762a1bSJed Brown
229566063dSJacob Faibussowitsch PetscCall(PetscHSetIResize(ht, 0));
239566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
242c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0);
25c4762a1bSJed Brown
269566063dSJacob Faibussowitsch PetscCall(PetscHSetIHas(ht, 42, &has));
272c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE);
28c4762a1bSJed Brown
299566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht, 42));
309566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
312c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 1);
329566063dSJacob Faibussowitsch PetscCall(PetscHSetIHas(ht, 42, &has));
332c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE);
34c4762a1bSJed Brown
359566063dSJacob Faibussowitsch PetscCall(PetscHSetIDel(ht, 42));
369566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
372c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0);
389566063dSJacob Faibussowitsch PetscCall(PetscHSetIHas(ht, 42, &has));
392c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE);
409566063dSJacob Faibussowitsch PetscCall(PetscHSetIDel(ht, 42));
419566063dSJacob Faibussowitsch PetscCall(PetscHSetIDel(ht, 24));
42c4762a1bSJed Brown
439566063dSJacob Faibussowitsch PetscCall(PetscHSetIQueryAdd(ht, 123, &flag));
442c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE);
459566063dSJacob Faibussowitsch PetscCall(PetscHSetIQueryAdd(ht, 123, &flag));
462c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE);
479566063dSJacob Faibussowitsch PetscCall(PetscHSetIQueryDel(ht, 123, &flag));
482c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE);
499566063dSJacob Faibussowitsch PetscCall(PetscHSetIQueryDel(ht, 123, &flag));
502c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE);
51c4762a1bSJed Brown
529566063dSJacob Faibussowitsch PetscCall(PetscHSetIResize(ht, 13));
539566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
542c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0);
55c4762a1bSJed Brown
569566063dSJacob Faibussowitsch PetscCall(PetscHSetIClear(ht));
579566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
582c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0);
59c4762a1bSJed Brown
609566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht, 42));
619566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht, 13));
629566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
632c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 2);
64c4762a1bSJed Brown
65c4762a1bSJed Brown off = 0;
669566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetElems(ht, &off, array));
679566063dSJacob Faibussowitsch PetscCall(PetscSortInt(off, array));
682c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 2);
692c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13);
702c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42);
719566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetElems(ht, &off, array));
729566063dSJacob Faibussowitsch PetscCall(PetscSortInt(2, array + 2));
732c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 4);
742c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13);
752c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42);
762c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13);
772c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42);
78c4762a1bSJed Brown
79c4762a1bSJed Brown off = 0;
809566063dSJacob Faibussowitsch PetscCall(PetscHSetIDuplicate(ht, &hd));
819566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetElems(hd, &off, array));
829566063dSJacob Faibussowitsch PetscCall(PetscSortInt(off, array));
832c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 2);
842c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13);
852c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42);
869566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&hd));
87c4762a1bSJed Brown
889566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht, 0));
899566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
902c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0);
919566063dSJacob Faibussowitsch PetscCall(PetscHSetIReset(ht));
929566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
932c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0);
949566063dSJacob Faibussowitsch PetscCall(PetscHSetIReset(ht));
959566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
962c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0);
979566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht, 0));
989566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
992c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0);
100c4762a1bSJed Brown
1019566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&ht));
1022c71b3e2SJacob Faibussowitsch PetscTestCheck(ht == NULL);
103c4762a1bSJed Brown
1049566063dSJacob Faibussowitsch PetscCall(PetscHSetICreate(&ht));
1059566063dSJacob Faibussowitsch PetscCall(PetscHSetIReset(ht));
1069566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &n));
1072c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0);
1089566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&ht));
109c4762a1bSJed Brown
1109566063dSJacob Faibussowitsch PetscCall(PetscHSetICreate(&ht));
1119566063dSJacob Faibussowitsch PetscCall(PetscHSetICreate(&hd));
112c4762a1bSJed Brown n = 10;
1139566063dSJacob Faibussowitsch PetscCall(PetscHSetIResize(ht, n));
1149566063dSJacob Faibussowitsch PetscCall(PetscHSetIResize(hd, n));
1159566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetCapacity(ht, &na));
1169566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetCapacity(hd, &nb));
1172c71b3e2SJacob Faibussowitsch PetscTestCheck(na >= n);
1182c71b3e2SJacob Faibussowitsch PetscTestCheck(nb >= n);
119c4762a1bSJed Brown for (i = 0; i < n; i++) {
1209566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht, i + 1));
1219566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(hd, i + 1 + n));
122c4762a1bSJed Brown }
1239566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetCapacity(ht, &nb));
1242c71b3e2SJacob Faibussowitsch PetscTestCheck(nb >= na);
125c4762a1bSJed Brown /* Merge ht and hd, and the result is in ht */
1269566063dSJacob Faibussowitsch PetscCall(PetscHSetIUpdate(ht, hd));
1279566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&hd));
1289566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht, &size));
1292c71b3e2SJacob Faibussowitsch PetscTestCheck(size == (2 * n));
1309566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(n * 2, &marray));
131c4762a1bSJed Brown off = 0;
1329566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetElems(ht, &off, marray));
1339566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&ht));
1342c71b3e2SJacob Faibussowitsch PetscTestCheck(off == (2 * n));
1359566063dSJacob Faibussowitsch PetscCall(PetscSortInt(off, marray));
136c4762a1bSJed Brown for (i = 0; i < n; i++) {
1372c71b3e2SJacob Faibussowitsch PetscTestCheck(marray[i] == (i + 1));
1382c71b3e2SJacob Faibussowitsch PetscTestCheck(marray[n + i] == (i + 1 + n));
139c4762a1bSJed Brown }
1409566063dSJacob Faibussowitsch PetscCall(PetscFree(marray));
141c4762a1bSJed Brown
1429566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
143b122ec5aSJacob Faibussowitsch return 0;
144c4762a1bSJed Brown }
145c4762a1bSJed Brown
146c4762a1bSJed Brown /*TEST
147c4762a1bSJed Brown
148c4762a1bSJed Brown test:
149*3886731fSPierre Jolivet output_file: output/empty.out
150c4762a1bSJed Brown
151c4762a1bSJed Brown TEST*/
152