Home | History | Annotate | Download | only in depool
      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, deInt16);
     29 DE_IMPLEMENT_POOL_SET(deTestSet, deInt16, deInt16Hash, deInt16Equal);
     30 
     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, (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