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