1 static char help[] = "Test PETSc integer hash set.\n\n";
2
3 #include <petsc/private/hashseti.h>
4 #include <petscsys.h>
5
6 #define PetscAssert(expr) do { \
7 if (PetscUnlikely(!(expr))) \
8 SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_LIB, \
9 "Assertion: `%s' failed.", \
10 PetscStringize(expr)); \
11 } while (0)
12
13
main(int argc,char ** argv)14 int main(int argc,char **argv)
15 {
16 PetscHSetI ht = NULL, hd;
17 PetscInt n, off, array[4],na,nb,i,*marray,size;
18 PetscBool has, flag;
19 PetscErrorCode ierr;
20
21 ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr;
22
23 ierr = PetscHSetICreate(&ht);CHKERRQ(ierr);
24 PetscAssert(ht != NULL);
25 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
26 PetscAssert(n == 0);
27
28 ierr = PetscHSetIResize(ht,0);CHKERRQ(ierr);
29 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
30 PetscAssert(n == 0);
31
32 ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr);
33 PetscAssert(has == PETSC_FALSE);
34
35 ierr = PetscHSetIAdd(ht,42);CHKERRQ(ierr);
36 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
37 PetscAssert(n == 1);
38 ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr);
39 PetscAssert(has == PETSC_TRUE);
40
41 ierr = PetscHSetIDel(ht,42);CHKERRQ(ierr);
42 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
43 PetscAssert(n == 0);
44 ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr);
45 PetscAssert(has == PETSC_FALSE);
46 ierr = PetscHSetIDel(ht,42);CHKERRQ(ierr);
47 ierr = PetscHSetIDel(ht,24);CHKERRQ(ierr);
48
49 ierr = PetscHSetIQueryAdd(ht,123,&flag);CHKERRQ(ierr);
50 PetscAssert(flag == PETSC_TRUE);
51 ierr = PetscHSetIQueryAdd(ht,123,&flag);CHKERRQ(ierr);
52 PetscAssert(flag == PETSC_FALSE);
53 ierr = PetscHSetIQueryDel(ht,123,&flag);CHKERRQ(ierr);
54 PetscAssert(flag == PETSC_TRUE);
55 ierr = PetscHSetIQueryDel(ht,123,&flag);CHKERRQ(ierr);
56 PetscAssert(flag == PETSC_FALSE);
57
58 ierr = PetscHSetIResize(ht,13);CHKERRQ(ierr);
59 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
60 PetscAssert(n == 0);
61
62 ierr = PetscHSetIClear(ht);CHKERRQ(ierr);
63 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
64 PetscAssert(n == 0);
65
66 ierr = PetscHSetIAdd(ht,42);CHKERRQ(ierr);
67 ierr = PetscHSetIAdd(ht,13);CHKERRQ(ierr);
68 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
69 PetscAssert(n == 2);
70
71 off = 0;
72 ierr = PetscHSetIGetElems(ht,&off,array);CHKERRQ(ierr);
73 ierr = PetscSortInt(off,array);CHKERRQ(ierr);
74 PetscAssert(off == 2);
75 PetscAssert(array[0] == 13);
76 PetscAssert(array[1] == 42);
77 ierr = PetscHSetIGetElems(ht,&off,array);CHKERRQ(ierr);
78 ierr = PetscSortInt(2,array+2);CHKERRQ(ierr);
79 PetscAssert(off == 4);
80 PetscAssert(array[0] == 13);
81 PetscAssert(array[1] == 42);
82 PetscAssert(array[0] == 13);
83 PetscAssert(array[1] == 42);
84
85 off = 0;
86 ierr = PetscHSetIDuplicate(ht,&hd);CHKERRQ(ierr);
87 ierr = PetscHSetIGetElems(hd,&off,array);CHKERRQ(ierr);
88 ierr = PetscSortInt(off,array);CHKERRQ(ierr);
89 PetscAssert(off == 2);
90 PetscAssert(array[0] == 13);
91 PetscAssert(array[1] == 42);
92 ierr = PetscHSetIDestroy(&hd);CHKERRQ(ierr);
93
94 ierr = PetscHSetIAdd(ht,0);CHKERRQ(ierr);
95 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
96 PetscAssert(n != 0);
97 ierr = PetscHSetIReset(ht);CHKERRQ(ierr);
98 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
99 PetscAssert(n == 0);
100 ierr = PetscHSetIReset(ht);CHKERRQ(ierr);
101 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
102 PetscAssert(n == 0);
103 ierr = PetscHSetIAdd(ht,0);CHKERRQ(ierr);
104 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
105 PetscAssert(n != 0);
106
107 ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr);
108 PetscAssert(ht == NULL);
109
110 ierr = PetscHSetICreate(&ht);CHKERRQ(ierr);
111 ierr = PetscHSetIReset(ht);CHKERRQ(ierr);
112 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr);
113 PetscAssert(n == 0);
114 ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr);
115
116 ierr = PetscHSetICreate(&ht);CHKERRQ(ierr);
117 ierr = PetscHSetICreate(&hd);CHKERRQ(ierr);
118 n = 10;
119 ierr = PetscHSetIResize(ht,n);CHKERRQ(ierr);
120 ierr = PetscHSetIResize(hd,n);CHKERRQ(ierr);
121 ierr = PetscHSetIGetCapacity(ht,&na);CHKERRQ(ierr);
122 ierr = PetscHSetIGetCapacity(hd,&nb);CHKERRQ(ierr);
123 PetscAssert(na>=n);
124 PetscAssert(nb>=n);
125 for (i=0; i<n; i++) {
126 ierr = PetscHSetIAdd(ht,i+1);CHKERRQ(ierr);
127 ierr = PetscHSetIAdd(hd,i+1+n);CHKERRQ(ierr);
128 }
129 ierr = PetscHSetIGetCapacity(ht,&nb);CHKERRQ(ierr);
130 PetscAssert(nb>=na);
131 /* Merge ht and hd, and the result is in ht */
132 ierr = PetscHSetIUpdate(ht,hd);CHKERRQ(ierr);
133 ierr = PetscHSetIDestroy(&hd);CHKERRQ(ierr);
134 ierr = PetscHSetIGetSize(ht,&size);CHKERRQ(ierr);
135 PetscAssert(size==(2*n));CHKERRQ(ierr);
136 ierr = PetscMalloc1(n*2,&marray);CHKERRQ(ierr);
137 off = 0;
138 ierr = PetscHSetIGetElems(ht,&off,marray);CHKERRQ(ierr);
139 ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr);
140 PetscAssert(off==(2*n));
141 ierr = PetscSortInt(off,marray);CHKERRQ(ierr);
142 for (i=0; i<n; i++) {
143 PetscAssert(marray[i]==(i+1));
144 PetscAssert(marray[n+i]==(i+1+n));
145 }
146 ierr = PetscFree(marray);CHKERRQ(ierr);
147
148 ierr = PetscFinalize();
149 return ierr;
150 }
151
152
153 /*TEST
154
155 test:
156
157 TEST*/
158