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 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