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