xref: /petsc/src/sys/tests/ex41.c (revision 356ed81403a8ddb9cbcae868d64486ea275d004c)
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 PetscTestCheck(expr) PetscCheck(expr,PETSC_COMM_SELF,PETSC_ERR_LIB,"Assertion: `%s' failed.",PetscStringize(expr))
7 
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;
13 
14   PetscCall(PetscInitialize(&argc,&argv,NULL,help));
15 
16   PetscCall(PetscHSetICreate(&ht));
17   PetscTestCheck(ht != NULL);
18   PetscCall(PetscHSetIGetSize(ht,&n));
19   PetscTestCheck(n == 0);
20 
21   PetscCall(PetscHSetIResize(ht,0));
22   PetscCall(PetscHSetIGetSize(ht,&n));
23   PetscTestCheck(n == 0);
24 
25   PetscCall(PetscHSetIHas(ht,42,&has));
26   PetscTestCheck(has == PETSC_FALSE);
27 
28   PetscCall(PetscHSetIAdd(ht,42));
29   PetscCall(PetscHSetIGetSize(ht,&n));
30   PetscTestCheck(n == 1);
31   PetscCall(PetscHSetIHas(ht,42,&has));
32   PetscTestCheck(has == PETSC_TRUE);
33 
34   PetscCall(PetscHSetIDel(ht,42));
35   PetscCall(PetscHSetIGetSize(ht,&n));
36   PetscTestCheck(n == 0);
37   PetscCall(PetscHSetIHas(ht,42,&has));
38   PetscTestCheck(has == PETSC_FALSE);
39   PetscCall(PetscHSetIDel(ht,42));
40   PetscCall(PetscHSetIDel(ht,24));
41 
42   PetscCall(PetscHSetIQueryAdd(ht,123,&flag));
43   PetscTestCheck(flag == PETSC_TRUE);
44   PetscCall(PetscHSetIQueryAdd(ht,123,&flag));
45   PetscTestCheck(flag == PETSC_FALSE);
46   PetscCall(PetscHSetIQueryDel(ht,123,&flag));
47   PetscTestCheck(flag == PETSC_TRUE);
48   PetscCall(PetscHSetIQueryDel(ht,123,&flag));
49   PetscTestCheck(flag == PETSC_FALSE);
50 
51   PetscCall(PetscHSetIResize(ht,13));
52   PetscCall(PetscHSetIGetSize(ht,&n));
53   PetscTestCheck(n == 0);
54 
55   PetscCall(PetscHSetIClear(ht));
56   PetscCall(PetscHSetIGetSize(ht,&n));
57   PetscTestCheck(n == 0);
58 
59   PetscCall(PetscHSetIAdd(ht,42));
60   PetscCall(PetscHSetIAdd(ht,13));
61   PetscCall(PetscHSetIGetSize(ht,&n));
62   PetscTestCheck(n == 2);
63 
64   off = 0;
65   PetscCall(PetscHSetIGetElems(ht,&off,array));
66   PetscCall(PetscSortInt(off,array));
67   PetscTestCheck(off == 2);
68   PetscTestCheck(array[0] == 13);
69   PetscTestCheck(array[1] == 42);
70   PetscCall(PetscHSetIGetElems(ht,&off,array));
71   PetscCall(PetscSortInt(2,array+2));
72   PetscTestCheck(off == 4);
73   PetscTestCheck(array[0] == 13);
74   PetscTestCheck(array[1] == 42);
75   PetscTestCheck(array[0] == 13);
76   PetscTestCheck(array[1] == 42);
77 
78   off = 0;
79   PetscCall(PetscHSetIDuplicate(ht,&hd));
80   PetscCall(PetscHSetIGetElems(hd,&off,array));
81   PetscCall(PetscSortInt(off,array));
82   PetscTestCheck(off == 2);
83   PetscTestCheck(array[0] == 13);
84   PetscTestCheck(array[1] == 42);
85   PetscCall(PetscHSetIDestroy(&hd));
86 
87   PetscCall(PetscHSetIAdd(ht,0));
88   PetscCall(PetscHSetIGetSize(ht,&n));
89   PetscTestCheck(n != 0);
90   PetscCall(PetscHSetIReset(ht));
91   PetscCall(PetscHSetIGetSize(ht,&n));
92   PetscTestCheck(n == 0);
93   PetscCall(PetscHSetIReset(ht));
94   PetscCall(PetscHSetIGetSize(ht,&n));
95   PetscTestCheck(n == 0);
96   PetscCall(PetscHSetIAdd(ht,0));
97   PetscCall(PetscHSetIGetSize(ht,&n));
98   PetscTestCheck(n != 0);
99 
100   PetscCall(PetscHSetIDestroy(&ht));
101   PetscTestCheck(ht == NULL);
102 
103   PetscCall(PetscHSetICreate(&ht));
104   PetscCall(PetscHSetIReset(ht));
105   PetscCall(PetscHSetIGetSize(ht,&n));
106   PetscTestCheck(n == 0);
107   PetscCall(PetscHSetIDestroy(&ht));
108 
109   PetscCall(PetscHSetICreate(&ht));
110   PetscCall(PetscHSetICreate(&hd));
111   n = 10;
112   PetscCall(PetscHSetIResize(ht,n));
113   PetscCall(PetscHSetIResize(hd,n));
114   PetscCall(PetscHSetIGetCapacity(ht,&na));
115   PetscCall(PetscHSetIGetCapacity(hd,&nb));
116   PetscTestCheck(na>=n);
117   PetscTestCheck(nb>=n);
118   for (i=0; i<n; i++) {
119     PetscCall(PetscHSetIAdd(ht,i+1));
120     PetscCall(PetscHSetIAdd(hd,i+1+n));
121   }
122   PetscCall(PetscHSetIGetCapacity(ht,&nb));
123   PetscTestCheck(nb>=na);
124   /* Merge ht and hd, and the result is in ht */
125   PetscCall(PetscHSetIUpdate(ht,hd));
126   PetscCall(PetscHSetIDestroy(&hd));
127   PetscCall(PetscHSetIGetSize(ht,&size));
128   PetscTestCheck(size==(2*n));
129   PetscCall(PetscMalloc1(n*2,&marray));
130   off = 0;
131   PetscCall(PetscHSetIGetElems(ht,&off,marray));
132   PetscCall(PetscHSetIDestroy(&ht));
133   PetscTestCheck(off==(2*n));
134   PetscCall(PetscSortInt(off,marray));
135   for (i=0; i<n; i++) {
136     PetscTestCheck(marray[i]==(i+1));
137     PetscTestCheck(marray[n+i]==(i+1+n));
138   }
139   PetscCall(PetscFree(marray));
140 
141   PetscCall(PetscFinalize());
142   return 0;
143 }
144 
145 /*TEST
146 
147    test:
148 
149 TEST*/
150