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