Tune pool_get / pool_put
[vpp.git] / src / vppinfra / test_pool_iterate.c
1 /*
2   Copyright (c) 2011 Cisco and/or its affiliates.
3
4   * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15 */
16
17 #include <vppinfra/mem.h>
18 #include <vppinfra/pool.h>
19
20 #ifdef __KERNEL__
21 #include <linux/unistd.h>
22 #else
23 #include <unistd.h>
24 #endif
25
26 int
27 main (int argc, char *argv[])
28 {
29   int i;
30   uword next;
31   u32 last_len = 0;
32   u32 *tp = 0;
33   u32 *junk;
34
35   for (i = 0; i < 70; i++)
36     {
37       pool_get (tp, junk);
38       if (vec_len (tp) > last_len)
39         {
40           last_len = vec_len (tp);
41           fformat (stdout, "vec_len (tp) now %d\n", last_len);
42         }
43     }
44
45   (void) junk;                  /* compiler warning */
46
47   pool_put_index (tp, 1);
48   pool_put_index (tp, 65);
49
50   for (i = 0; i < 70; i++)
51     {
52       int is_free;
53
54       is_free = pool_is_free_index (tp, i);
55
56       if (is_free == 0)
57         {
58           if (i == 1 || i == 65)
59             clib_warning ("oops, free index %d reported busy", i);
60         }
61       else
62         {
63           if (i != 1 && i != 65)
64             clib_warning ("oops, busy index %d reported free", i);
65         }
66     }
67
68   fformat (stdout, "vec_len (tp) is %d\n", vec_len (tp));
69
70   next = ~0;
71   do
72     {
73       next = pool_next_index (tp, next);
74       fformat (stdout, "next index %d\n", next);
75     }
76   while (next != ~0);
77
78   /* *INDENT-OFF* */
79   pool_foreach (junk, tp,
80   ({
81     int is_free;
82
83     is_free = pool_is_free_index (tp, junk - tp);
84       if (is_free == 0)
85         {
86           if (i == 1 || i == 65)
87             clib_warning ("oops, free index %d reported busy", i);
88         }
89       else
90         {
91           if (i != 1 && i != 65)
92             clib_warning ("oops, busy index %d reported free", i);
93         }
94   }));
95   /* *INDENT-ON* */
96
97   return 0;
98 }
99
100 /*
101  * fd.io coding-style-patch-verification: ON
102  *
103  * Local Variables:
104  * eval: (c-set-style "gnu")
105  * End:
106  */