Actual source code: ex41.c

  1: static char help[] = "Test PETSc integer hash set.\n\n";

  3: #include <petsc/private/hashseti.h>
  4: #include <petscsys.h>

  6: #define PetscTestCheck(expr) PetscCheck(expr, PETSC_COMM_SELF, PETSC_ERR_LIB, "Assertion: `%s' failed.", PetscStringize(expr))

  8: int main(int argc, char **argv)
  9: {
 10:   PetscHSetI ht = NULL, hd;
 11:   PetscInt   n, off, array[4], na, nb, i, *marray, size;
 12:   PetscBool  has, flag;

 14:   PetscFunctionBeginUser;
 15:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));

 17:   PetscCall(PetscHSetICreate(&ht));
 18:   PetscTestCheck(ht != NULL);
 19:   PetscCall(PetscHSetIGetSize(ht, &n));
 20:   PetscTestCheck(n == 0);

 22:   PetscCall(PetscHSetIResize(ht, 0));
 23:   PetscCall(PetscHSetIGetSize(ht, &n));
 24:   PetscTestCheck(n == 0);

 26:   PetscCall(PetscHSetIHas(ht, 42, &has));
 27:   PetscTestCheck(has == PETSC_FALSE);

 29:   PetscCall(PetscHSetIAdd(ht, 42));
 30:   PetscCall(PetscHSetIGetSize(ht, &n));
 31:   PetscTestCheck(n == 1);
 32:   PetscCall(PetscHSetIHas(ht, 42, &has));
 33:   PetscTestCheck(has == PETSC_TRUE);

 35:   PetscCall(PetscHSetIDel(ht, 42));
 36:   PetscCall(PetscHSetIGetSize(ht, &n));
 37:   PetscTestCheck(n == 0);
 38:   PetscCall(PetscHSetIHas(ht, 42, &has));
 39:   PetscTestCheck(has == PETSC_FALSE);
 40:   PetscCall(PetscHSetIDel(ht, 42));
 41:   PetscCall(PetscHSetIDel(ht, 24));

 43:   PetscCall(PetscHSetIQueryAdd(ht, 123, &flag));
 44:   PetscTestCheck(flag == PETSC_TRUE);
 45:   PetscCall(PetscHSetIQueryAdd(ht, 123, &flag));
 46:   PetscTestCheck(flag == PETSC_FALSE);
 47:   PetscCall(PetscHSetIQueryDel(ht, 123, &flag));
 48:   PetscTestCheck(flag == PETSC_TRUE);
 49:   PetscCall(PetscHSetIQueryDel(ht, 123, &flag));
 50:   PetscTestCheck(flag == PETSC_FALSE);

 52:   PetscCall(PetscHSetIResize(ht, 13));
 53:   PetscCall(PetscHSetIGetSize(ht, &n));
 54:   PetscTestCheck(n == 0);

 56:   PetscCall(PetscHSetIClear(ht));
 57:   PetscCall(PetscHSetIGetSize(ht, &n));
 58:   PetscTestCheck(n == 0);

 60:   PetscCall(PetscHSetIAdd(ht, 42));
 61:   PetscCall(PetscHSetIAdd(ht, 13));
 62:   PetscCall(PetscHSetIGetSize(ht, &n));
 63:   PetscTestCheck(n == 2);

 65:   off = 0;
 66:   PetscCall(PetscHSetIGetElems(ht, &off, array));
 67:   PetscCall(PetscSortInt(off, array));
 68:   PetscTestCheck(off == 2);
 69:   PetscTestCheck(array[0] == 13);
 70:   PetscTestCheck(array[1] == 42);
 71:   PetscCall(PetscHSetIGetElems(ht, &off, array));
 72:   PetscCall(PetscSortInt(2, array + 2));
 73:   PetscTestCheck(off == 4);
 74:   PetscTestCheck(array[0] == 13);
 75:   PetscTestCheck(array[1] == 42);
 76:   PetscTestCheck(array[0] == 13);
 77:   PetscTestCheck(array[1] == 42);

 79:   off = 0;
 80:   PetscCall(PetscHSetIDuplicate(ht, &hd));
 81:   PetscCall(PetscHSetIGetElems(hd, &off, array));
 82:   PetscCall(PetscSortInt(off, array));
 83:   PetscTestCheck(off == 2);
 84:   PetscTestCheck(array[0] == 13);
 85:   PetscTestCheck(array[1] == 42);
 86:   PetscCall(PetscHSetIDestroy(&hd));

 88:   PetscCall(PetscHSetIAdd(ht, 0));
 89:   PetscCall(PetscHSetIGetSize(ht, &n));
 90:   PetscTestCheck(n != 0);
 91:   PetscCall(PetscHSetIReset(ht));
 92:   PetscCall(PetscHSetIGetSize(ht, &n));
 93:   PetscTestCheck(n == 0);
 94:   PetscCall(PetscHSetIReset(ht));
 95:   PetscCall(PetscHSetIGetSize(ht, &n));
 96:   PetscTestCheck(n == 0);
 97:   PetscCall(PetscHSetIAdd(ht, 0));
 98:   PetscCall(PetscHSetIGetSize(ht, &n));
 99:   PetscTestCheck(n != 0);

101:   PetscCall(PetscHSetIDestroy(&ht));
102:   PetscTestCheck(ht == NULL);

104:   PetscCall(PetscHSetICreate(&ht));
105:   PetscCall(PetscHSetIReset(ht));
106:   PetscCall(PetscHSetIGetSize(ht, &n));
107:   PetscTestCheck(n == 0);
108:   PetscCall(PetscHSetIDestroy(&ht));

110:   PetscCall(PetscHSetICreate(&ht));
111:   PetscCall(PetscHSetICreate(&hd));
112:   n = 10;
113:   PetscCall(PetscHSetIResize(ht, n));
114:   PetscCall(PetscHSetIResize(hd, n));
115:   PetscCall(PetscHSetIGetCapacity(ht, &na));
116:   PetscCall(PetscHSetIGetCapacity(hd, &nb));
117:   PetscTestCheck(na >= n);
118:   PetscTestCheck(nb >= n);
119:   for (i = 0; i < n; i++) {
120:     PetscCall(PetscHSetIAdd(ht, i + 1));
121:     PetscCall(PetscHSetIAdd(hd, i + 1 + n));
122:   }
123:   PetscCall(PetscHSetIGetCapacity(ht, &nb));
124:   PetscTestCheck(nb >= na);
125:   /* Merge ht and hd, and the result is in ht */
126:   PetscCall(PetscHSetIUpdate(ht, hd));
127:   PetscCall(PetscHSetIDestroy(&hd));
128:   PetscCall(PetscHSetIGetSize(ht, &size));
129:   PetscTestCheck(size == (2 * n));
130:   PetscCall(PetscMalloc1(n * 2, &marray));
131:   off = 0;
132:   PetscCall(PetscHSetIGetElems(ht, &off, marray));
133:   PetscCall(PetscHSetIDestroy(&ht));
134:   PetscTestCheck(off == (2 * n));
135:   PetscCall(PetscSortInt(off, marray));
136:   for (i = 0; i < n; i++) {
137:     PetscTestCheck(marray[i] == (i + 1));
138:     PetscTestCheck(marray[n + i] == (i + 1 + n));
139:   }
140:   PetscCall(PetscFree(marray));

142:   PetscCall(PetscFinalize());
143:   return 0;
144: }

146: /*TEST

148:    test:

150: TEST*/