1c4762a1bSJed Brown static char help[] = "Test PETSc integer hash map.\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petsc/private/hashmapi.h> 4c4762a1bSJed Brown #include <petsc/private/hashmapiv.h> 5c4762a1bSJed Brown #include <petscsys.h> 6c4762a1bSJed Brown 7c4762a1bSJed Brown /* Unused, keep it for testing purposes */ 8c4762a1bSJed Brown PETSC_HASH_MAP(HMapIP, PetscInt, void *, PetscHashInt, PetscHashEqual, NULL) 9c4762a1bSJed Brown 10c4762a1bSJed Brown /* Unused, keep it for testing purposes */ 119371c9d4SSatish Balay typedef struct { 129371c9d4SSatish Balay double x; 139371c9d4SSatish Balay double y; 149371c9d4SSatish Balay double z; 159371c9d4SSatish Balay } Point; 16c4762a1bSJed Brown static Point origin = {0.0, 0.0, 0.0}; 17c4762a1bSJed Brown PETSC_HASH_MAP(HMapIS, PetscInt, Point, PetscHashInt, PetscHashEqual, origin) 18c4762a1bSJed Brown 195f80ce2aSJacob Faibussowitsch #define PetscTestCheck(expr) PetscCheck(expr, PETSC_COMM_SELF, PETSC_ERR_LIB, "Assertion: `%s' failed.", PetscStringize(expr)) 20c4762a1bSJed Brown 21d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv) 22d71ae5a4SJacob Faibussowitsch { 23c4762a1bSJed Brown PetscHMapI ht = NULL, hd; 24c4762a1bSJed Brown PetscHMapIV htv; 25c4762a1bSJed Brown PetscInt n, v, koff, keys[4], voff, vals[4], na, nb, i, size, *karray, off; 26c4762a1bSJed Brown PetscScalar *varray, *vwork; 27c4762a1bSJed Brown PetscBool has, flag; 28c4762a1bSJed Brown 29327415f7SBarry Smith PetscFunctionBeginUser; 309566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 31c4762a1bSJed Brown 329566063dSJacob Faibussowitsch PetscCall(PetscHMapICreate(&ht)); 332c71b3e2SJacob Faibussowitsch PetscTestCheck(ht != NULL); 349566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 352c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 36c4762a1bSJed Brown 379566063dSJacob Faibussowitsch PetscCall(PetscHMapIResize(ht, 0)); 389566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 392c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 40c4762a1bSJed Brown 419566063dSJacob Faibussowitsch PetscCall(PetscHMapIHas(ht, 123, &has)); 422c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 439566063dSJacob Faibussowitsch PetscCall(PetscHMapIGet(ht, 123, &v)); 442c71b3e2SJacob Faibussowitsch PetscTestCheck(v == -1); 45c4762a1bSJed Brown 469566063dSJacob Faibussowitsch PetscCall(PetscHMapISet(ht, 123, 42)); 479566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 482c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 1); 499566063dSJacob Faibussowitsch PetscCall(PetscHMapIHas(ht, 123, &has)); 502c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 519566063dSJacob Faibussowitsch PetscCall(PetscHMapIGet(ht, 123, &v)); 522c71b3e2SJacob Faibussowitsch PetscTestCheck(v == 42); 53c4762a1bSJed Brown 549566063dSJacob Faibussowitsch PetscCall(PetscHMapIDel(ht, 123)); 559566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 562c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 579566063dSJacob Faibussowitsch PetscCall(PetscHMapIHas(ht, 123, &has)); 582c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 599566063dSJacob Faibussowitsch PetscCall(PetscHMapIGet(ht, 123, &v)); 602c71b3e2SJacob Faibussowitsch PetscTestCheck(v == -1); 61c4762a1bSJed Brown 629566063dSJacob Faibussowitsch PetscCall(PetscHMapIQuerySet(ht, 123, 1, &flag)); 632c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 649566063dSJacob Faibussowitsch PetscCall(PetscHMapIQuerySet(ht, 123, 1, &flag)); 652c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 669566063dSJacob Faibussowitsch PetscCall(PetscHMapIQueryDel(ht, 123, &flag)); 672c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 689566063dSJacob Faibussowitsch PetscCall(PetscHMapIQueryDel(ht, 123, &flag)); 692c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 70c4762a1bSJed Brown 719566063dSJacob Faibussowitsch PetscCall(PetscHMapIResize(ht, 13)); 729566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 732c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 74c4762a1bSJed Brown 759566063dSJacob Faibussowitsch PetscCall(PetscHMapIClear(ht)); 769566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 772c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 78c4762a1bSJed Brown 799566063dSJacob Faibussowitsch PetscCall(PetscHMapISet(ht, 321, 24)); 809566063dSJacob Faibussowitsch PetscCall(PetscHMapISet(ht, 123, 42)); 819566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 822c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 2); 83c4762a1bSJed Brown 849371c9d4SSatish Balay koff = 0; 859371c9d4SSatish Balay keys[0] = keys[1] = 0; 869566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetKeys(ht, &koff, keys)); 879566063dSJacob Faibussowitsch PetscCall(PetscSortInt(koff, keys)); 882c71b3e2SJacob Faibussowitsch PetscTestCheck(koff == 2); 892c71b3e2SJacob Faibussowitsch PetscTestCheck(keys[0] == 123); 902c71b3e2SJacob Faibussowitsch PetscTestCheck(keys[1] == 321); 91c4762a1bSJed Brown 929371c9d4SSatish Balay voff = 0; 939371c9d4SSatish Balay vals[0] = vals[1] = 0; 949566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetVals(ht, &voff, vals)); 959566063dSJacob Faibussowitsch PetscCall(PetscSortInt(voff, vals)); 962c71b3e2SJacob Faibussowitsch PetscTestCheck(voff == 2); 972c71b3e2SJacob Faibussowitsch PetscTestCheck(vals[0] == 24); 982c71b3e2SJacob Faibussowitsch PetscTestCheck(vals[1] == 42); 99c4762a1bSJed Brown 1009371c9d4SSatish Balay koff = 0; 1019371c9d4SSatish Balay keys[0] = keys[1] = 0; 1029371c9d4SSatish Balay voff = 0; 1039371c9d4SSatish Balay vals[0] = vals[1] = 0; 1049566063dSJacob Faibussowitsch PetscCall(PetscHMapIDuplicate(ht, &hd)); 1059566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetKeys(ht, &koff, keys)); 1069566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetVals(ht, &voff, vals)); 1079566063dSJacob Faibussowitsch PetscCall(PetscSortInt(koff, keys)); 1089566063dSJacob Faibussowitsch PetscCall(PetscSortInt(voff, vals)); 1092c71b3e2SJacob Faibussowitsch PetscTestCheck(koff == 2); 1102c71b3e2SJacob Faibussowitsch PetscTestCheck(voff == 2); 1112c71b3e2SJacob Faibussowitsch PetscTestCheck(keys[0] == 123); 1122c71b3e2SJacob Faibussowitsch PetscTestCheck(keys[1] == 321); 1132c71b3e2SJacob Faibussowitsch PetscTestCheck(vals[0] == 24); 1142c71b3e2SJacob Faibussowitsch PetscTestCheck(vals[1] == 42); 1159566063dSJacob Faibussowitsch PetscCall(PetscHMapIDestroy(&hd)); 116c4762a1bSJed Brown 1179566063dSJacob Faibussowitsch PetscCall(PetscHMapISet(ht, 0, 0)); 1189566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 1192c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 1209566063dSJacob Faibussowitsch PetscCall(PetscHMapIReset(ht)); 1219566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 1222c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 1239566063dSJacob Faibussowitsch PetscCall(PetscHMapIReset(ht)); 1249566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 1252c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 1269566063dSJacob Faibussowitsch PetscCall(PetscHMapISet(ht, 0, 0)); 1279566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 1282c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 129c4762a1bSJed Brown 1309566063dSJacob Faibussowitsch PetscCall(PetscHMapIDestroy(&ht)); 1312c71b3e2SJacob Faibussowitsch PetscTestCheck(ht == NULL); 132c4762a1bSJed Brown 1339566063dSJacob Faibussowitsch PetscCall(PetscHMapICreate(&ht)); 1349566063dSJacob Faibussowitsch PetscCall(PetscHMapIReset(ht)); 1359566063dSJacob Faibussowitsch PetscCall(PetscHMapIGetSize(ht, &n)); 1362c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 1379566063dSJacob Faibussowitsch PetscCall(PetscHMapIDestroy(&ht)); 138c4762a1bSJed Brown 1399566063dSJacob Faibussowitsch PetscCall(PetscHMapIVCreate(&htv)); 140c4762a1bSJed Brown n = 10; 1419566063dSJacob Faibussowitsch PetscCall(PetscHMapIVResize(htv, n)); 1429566063dSJacob Faibussowitsch PetscCall(PetscHMapIVGetCapacity(htv, &na)); 1432c71b3e2SJacob Faibussowitsch PetscTestCheck(na >= n); 1449566063dSJacob Faibussowitsch for (i = 0; i < n; i++) PetscCall(PetscHMapIVSet(htv, i + 100, 10.)); 1455f80ce2aSJacob Faibussowitsch 1469566063dSJacob Faibussowitsch PetscCall(PetscHMapIVGetCapacity(htv, &nb)); 1472c71b3e2SJacob Faibussowitsch PetscTestCheck(nb >= na); 1489566063dSJacob Faibussowitsch for (i = 0; i < (2 * n); i++) PetscCall(PetscHMapIVAddValue(htv, i + 100, 5.)); 1495f80ce2aSJacob Faibussowitsch 1509566063dSJacob Faibussowitsch PetscCall(PetscHMapIVGetSize(htv, &size)); 1512c71b3e2SJacob Faibussowitsch PetscTestCheck(size == (2 * n)); 1529566063dSJacob Faibussowitsch PetscCall(PetscMalloc3(size, &karray, size, &varray, size, &vwork)); 153c4762a1bSJed Brown off = 0; 1549566063dSJacob Faibussowitsch PetscCall(PetscHMapIVGetPairs(htv, &off, karray, varray)); 1552c71b3e2SJacob Faibussowitsch PetscTestCheck(off == (2 * n)); 1569566063dSJacob Faibussowitsch PetscCall(PetscSortIntWithDataArray(off, karray, varray, sizeof(PetscScalar), vwork)); 157c4762a1bSJed Brown for (i = 0; i < n; i++) { 1582c71b3e2SJacob Faibussowitsch PetscTestCheck(karray[i] == (i + 100)); 1592c71b3e2SJacob Faibussowitsch PetscTestCheck(karray[n + i] == (n + i + 100)); 1602c71b3e2SJacob Faibussowitsch PetscTestCheck(varray[i] == 15.); 1612c71b3e2SJacob Faibussowitsch PetscTestCheck(varray[n + i] == 5.); 162c4762a1bSJed Brown } 1639566063dSJacob Faibussowitsch PetscCall(PetscFree3(karray, varray, vwork)); 1649566063dSJacob Faibussowitsch PetscCall(PetscHMapIVDestroy(&htv)); 165c4762a1bSJed Brown 1669566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 167b122ec5aSJacob Faibussowitsch return 0; 168c4762a1bSJed Brown } 169c4762a1bSJed Brown 170c4762a1bSJed Brown /*TEST 171c4762a1bSJed Brown 172c4762a1bSJed Brown test: 173*3886731fSPierre Jolivet output_file: output/empty.out 174c4762a1bSJed Brown 175c4762a1bSJed Brown TEST*/ 176