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