xref: /aosp_15_r20/external/deqp/framework/delibs/depool/dePoolSet.c (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 /*-------------------------------------------------------------------------
2  * drawElements Memory Pool Library
3  * --------------------------------
4  *
5  * Copyright 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *//*!
20  * \file
21  * \brief Memory pool set class.
22  *//*--------------------------------------------------------------------*/
23 
24 #include "dePoolSet.h"
25 
26 #include <string.h>
27 
28 DE_DECLARE_POOL_SET(deTestSet, int16_t);
29 DE_IMPLEMENT_POOL_SET(deTestSet, int16_t, deInt16Hash, deInt16Equal);
30 
dePoolSet_selfTest(void)31 void dePoolSet_selfTest(void)
32 {
33     deMemPool *pool = deMemPool_createRoot(DE_NULL, 0);
34     deTestSet *set  = deTestSet_create(pool);
35     int i;
36 
37     /* Test exists() on empty set. */
38     DE_TEST_ASSERT(deTestSet_getNumElements(set) == 0);
39     for (i = 0; i < 15000; i++)
40         DE_TEST_ASSERT(!deTestSet_exists(set, (int16_t)i));
41 
42     /* Test insert(). */
43     for (i = 0; i < 5000; i++)
44         deTestSet_insert(set, (int16_t)i);
45 
46     DE_TEST_ASSERT(deTestSet_getNumElements(set) == 5000);
47     for (i = 0; i < 25000; i++)
48     {
49         bool inserted = deInBounds32(i, 0, 5000);
50         bool found    = deTestSet_exists(set, (int16_t)i);
51         DE_TEST_ASSERT(found == inserted);
52     }
53 
54     /* Test delete(). */
55     for (i = 0; i < 1000; i++)
56         deTestSet_delete(set, (int16_t)i);
57 
58     DE_TEST_ASSERT(deTestSet_getNumElements(set) == 4000);
59     for (i = 0; i < 25000; i++)
60     {
61         bool inserted = deInBounds32(i, 1000, 5000);
62         bool found    = deTestSet_exists(set, (int16_t)i);
63         DE_TEST_ASSERT(found == inserted);
64     }
65 
66     /* Test insert() after delete(). */
67     for (i = 10000; i < 12000; i++)
68         deTestSet_insert(set, (int16_t)i);
69 
70     DE_TEST_ASSERT(deTestSet_getNumElements(set) == 6000);
71 
72     for (i = 0; i < 25000; i++)
73     {
74         bool inserted = (deInBounds32(i, 1000, 5000) || deInBounds32(i, 10000, 12000));
75         bool found    = deTestSet_exists(set, (int16_t)i);
76         DE_TEST_ASSERT(found == inserted);
77     }
78 
79     /* Test iterator. */
80     {
81         deTestSetIter iter;
82         int numFound = 0;
83 
84         for (deTestSetIter_init(set, &iter); deTestSetIter_hasItem(&iter); deTestSetIter_next(&iter))
85         {
86             int16_t key = deTestSetIter_getKey(&iter);
87             DE_TEST_ASSERT(deInBounds32(key, 1000, 5000) || deInBounds32(key, 10000, 12000));
88             DE_TEST_ASSERT(deTestSet_exists(set, key));
89             numFound++;
90         }
91 
92         DE_TEST_ASSERT(numFound == deTestSet_getNumElements(set));
93     }
94 
95     deMemPool_destroy(pool);
96 }
97