13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Memory Pool Library
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * --------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Memory pool array class.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Features of the pooled arrays:
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * - single indirection layer (grows exponentially)
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * - constant # elements per page
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * - recycles old indirection tables as element pages
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * - about 10% overhead on large arrays
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "dePoolArray.h"
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deInt32.h"
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <stdlib.h>
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <string.h>
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \internal
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Create a new pool array.
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param pool			Pool to allocate memory from.
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param elementSize	Size of the element to be put in array.
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param Pointer to the created array, or null on failure.
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
433c827367444ee418f129b2c238299f49d3264554Jarkko PoyrydePoolArray* dePoolArray_create (deMemPool* pool, int elementSize)
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	/* Alloc struct. */
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	dePoolArray* arr = DE_POOL_NEW(pool, dePoolArray);
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (!arr)
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return DE_NULL;
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	/* Init array. */
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	memset(arr, 0, sizeof(dePoolArray));
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	arr->pool			= pool;
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	arr->elementSize	= elementSize;
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return arr;
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \internal
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Ensure that the array can hold at least N elements.
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param arr	Array pointer.
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param size	Number of elements for which to reserve memory.
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param True on success, false on failure.
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
653c827367444ee418f129b2c238299f49d3264554Jarkko PoyrydeBool			dePoolArray_reserve			(dePoolArray* arr, int size)
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (size >= arr->capacity)
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		void*	oldPageTable			= DE_NULL;
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int		oldPageTableSize		= 0;
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int		newCapacity				= deAlign32(size, 1 << DE_ARRAY_ELEMENTS_PER_PAGE_LOG2);
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int		reqPageTableCapacity	= newCapacity >> DE_ARRAY_ELEMENTS_PER_PAGE_LOG2;
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (arr->pageTableCapacity < reqPageTableCapacity)
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			int		newPageTableCapacity	= deMax32(2*arr->pageTableCapacity, reqPageTableCapacity);
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			void**	newPageTable			= (void**)deMemPool_alloc(arr->pool, newPageTableCapacity * sizeof(void*));
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			int		i;
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (!newPageTable)
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				return DE_FALSE;
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			for (i = 0; i < arr->pageTableCapacity; i++)
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				newPageTable[i] = arr->pageTable[i];
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			for (; i < newPageTableCapacity; i++)
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				newPageTable[i] = DE_NULL;
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			/* Grab information about old page table for recycling purposes. */
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			oldPageTable		= arr->pageTable;
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			oldPageTableSize	= arr->pageTableCapacity * sizeof(void*);
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			arr->pageTable			= newPageTable;
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			arr->pageTableCapacity	= newPageTableCapacity;
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		/* Allocate new pages. */
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			int pageAllocSize = arr->elementSize << DE_ARRAY_ELEMENTS_PER_PAGE_LOG2;
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			int pageTableNdx = arr->capacity >> DE_ARRAY_ELEMENTS_PER_PAGE_LOG2;
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			/* Allocate new pages from recycled old page table. */
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			while (oldPageTableSize >= pageAllocSize)
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				void* newPage = oldPageTable;
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(arr->pageTableCapacity > pageTableNdx); /* \todo [petri] is this always true? */
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(!arr->pageTable[pageTableNdx]);
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				arr->pageTable[pageTableNdx++] = newPage;
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				oldPageTable = (void*)((deUint8*)oldPageTable + pageAllocSize);
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				oldPageTableSize -= pageAllocSize;
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			/* Allocate the rest of the needed pages from the pool. */
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			for (; pageTableNdx < reqPageTableCapacity; pageTableNdx++)
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			{
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				void* newPage = deMemPool_alloc(arr->pool, pageAllocSize);
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				if (!newPage)
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					return DE_FALSE;
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				DE_ASSERT(!arr->pageTable[pageTableNdx]);
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				arr->pageTable[pageTableNdx] = newPage;
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			}
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			arr->capacity = pageTableNdx << DE_ARRAY_ELEMENTS_PER_PAGE_LOG2;
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(arr->capacity >= newCapacity);
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return DE_TRUE;
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \internal
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Set the size of the array (also reserves capacity).
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param arr	Array pointer.
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param size	New size of the array (in elements).
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param True on success, false on failure.
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
1413c827367444ee418f129b2c238299f49d3264554Jarkko PoyrydeBool			dePoolArray_setSize			(dePoolArray* arr, int size)
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (!dePoolArray_reserve(arr, size))
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return DE_FALSE;
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	arr->numElements = size;
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return DE_TRUE;
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1503c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDE_DECLARE_POOL_ARRAY(dePoolIntArray, int);
1513c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDE_DECLARE_POOL_ARRAY(dePoolInt16Array, deInt16);
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \internal
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Test array functionality.
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid dePoolArray_selfTest (void)
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deMemPool*			pool	= deMemPool_createRoot(DE_NULL, 0);
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	dePoolIntArray*		arr		= dePoolIntArray_create(pool);
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	dePoolInt16Array*	arr16	= dePoolInt16Array_create(pool);
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int					i;
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	/* Test pushBack(). */
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (i = 0; i < 5000; i++)
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		/* Dummy alloc to try to break alignments. */
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		deMemPool_alloc(pool, 1);
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		dePoolIntArray_pushBack(arr, i);
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		dePoolInt16Array_pushBack(arr16, (deInt16)i);
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_TEST_ASSERT(dePoolIntArray_getNumElements(arr) == 5000);
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_TEST_ASSERT(dePoolInt16Array_getNumElements(arr16) == 5000);
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (i = 0; i < 5000; i++)
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(dePoolIntArray_get(arr, i) == i);
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(dePoolInt16Array_get(arr16, i) == i);
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	/* Test popBack(). */
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (i = 0; i < 1000; i++)
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(dePoolIntArray_popBack(arr) == (4999 - i));
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(dePoolInt16Array_popBack(arr16) == (4999 - i));
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_TEST_ASSERT(dePoolIntArray_getNumElements(arr) == 4000);
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_TEST_ASSERT(dePoolInt16Array_getNumElements(arr16) == 4000);
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (i = 0; i < 4000; i++)
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(dePoolIntArray_get(arr, i) == i);
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(dePoolInt16Array_get(arr16, i) == i);
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	/* Test setSize(). */
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	dePoolIntArray_setSize(arr, 1000);
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	dePoolInt16Array_setSize(arr16, 1000);
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (i = 1000; i < 5000; i++)
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		dePoolIntArray_pushBack(arr, i);
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		dePoolInt16Array_pushBack(arr16, (deInt16)i);
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_TEST_ASSERT(dePoolIntArray_getNumElements(arr) == 5000);
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_TEST_ASSERT(dePoolInt16Array_getNumElements(arr16) == 5000);
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (i = 0; i < 5000; i++)
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(dePoolIntArray_get(arr, i) == i);
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(dePoolInt16Array_get(arr16, i) == i);
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	/* Test set() and pushBack() with reserve(). */
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	arr = dePoolIntArray_create(pool);
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	dePoolIntArray_setSize(arr, 1500);
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	dePoolIntArray_reserve(arr, 2000);
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (i = 0; i < 1500; i++)
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		dePoolIntArray_set(arr, i, i);
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (; i < 5000; i++)
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		dePoolIntArray_pushBack(arr, i);
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_TEST_ASSERT(dePoolIntArray_getNumElements(arr) == 5000);
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (i = 0; i < 5000; i++)
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int val = dePoolIntArray_get(arr, i);
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		DE_TEST_ASSERT(val == i);
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deMemPool_destroy(pool);
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
232