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
28DE_DECLARE_POOL_SET(deTestSet, deInt16);
29DE_IMPLEMENT_POOL_SET(deTestSet, deInt16, deInt16Hash, deInt16Equal);
30
31void 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, (deInt16)i));
41
42	/* Test insert(). */
43	for (i = 0; i < 5000; i++)
44		deTestSet_insert(set, (deInt16)i);
45
46	DE_TEST_ASSERT(deTestSet_getNumElements(set) == 5000);
47	for (i = 0; i < 25000; i++)
48	{
49		deBool inserted	= deInBounds32(i, 0, 5000);
50		deBool found	= deTestSet_exists(set, (deInt16)i);
51		DE_TEST_ASSERT(found == inserted);
52	}
53
54	/* Test delete(). */
55	for (i = 0; i < 1000; i++)
56		deTestSet_delete(set, (deInt16)i);
57
58	DE_TEST_ASSERT(deTestSet_getNumElements(set) == 4000);
59	for (i = 0; i < 25000; i++)
60	{
61		deBool inserted	= deInBounds32(i, 1000, 5000);
62		deBool found	= deTestSet_exists(set, (deInt16)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, (deInt16)i);
69
70	DE_TEST_ASSERT(deTestSet_getNumElements(set) == 6000);
71
72	for (i = 0; i < 25000; i++)
73	{
74		deBool inserted	= (deInBounds32(i, 1000, 5000) || deInBounds32(i, 10000, 12000));
75		deBool found	= deTestSet_exists(set, (deInt16)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			deInt16 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