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