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