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