kerneltest/e32test/heap/t_heappagealloc.cpp
author hgs
Thu, 10 Jun 2010 11:48:01 +0100
changeset 149 d9f1e5bfe28c
permissions -rw-r--r--
201021_18
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
149
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     1
// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     2
// All rights reserved.
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     7
//
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     8
// Initial Contributors:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    10
//
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    11
// Contributors:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    12
//
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    13
// Description:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    14
// e32test\heap\t_page_alloc.cpp
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    15
// Overview:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    16
// Tests RHeap class.
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    17
// API Information:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    18
// RHeap
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    19
// Details:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    20
// - Tests that the page bitmap is consistent (i.e. encoded sizes are sensible and 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    21
// encoded in the correct fashion.
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    22
// - Tests that pages which appear in the page bitmap are present in memory by 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    23
// reading them.
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    24
// -Tests that other pages are not readable  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    25
// - Tests page bitmap by creating an allocator where all allocations >= 4kB use
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    26
// paged allocator, allocating a large number of regions of various sizes (from
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    27
// 4 kB to b MB), checking that the walk function finds them all correctly, freeing
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    28
// some of them, checking the walk function again, and so on. 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    29
// Platforms/Drives/Compatibility:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    30
// All
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    31
// Assumptions/Requirement/Pre-requisites:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    32
// Failures and causes:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    33
// Base Port information:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    34
// 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    35
//
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    36
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    37
#include <e32test.h>
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    38
#include <e32hal.h>
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    39
#include <e32def.h>
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    40
#include <e32math.h>
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    41
#include <e32def_private.h>
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    42
#include "dla.h"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    43
#include "slab.h"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    44
#include "page_alloc.h"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    45
#include "heap_hybrid.h"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    46
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    47
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    48
struct TMetaData
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    49
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    50
    TBool           iDLOnly;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    51
    RFastLock*      iLock;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    52
    TInt            iChunkSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    53
    TInt            iSlabThreshold;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    54
    unsigned        iSlabInitThreshold;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    55
    unsigned        iSlabConfigBits;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    56
    slab*           iPartialPage;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    57
    slab*           iFullSlab;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    58
    page*           iSparePage;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    59
    TUint8*         iMemBase;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    60
    unsigned char   iSizeMap[(MAXSLABSIZE>>2)+1];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    61
    slabset         iSlabAlloc[MAXSLABSIZE>>2];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    62
    slab**          iSlabAllocRealRootAddress[MAXSLABSIZE>>2];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    63
    };
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    64
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    65
LOCAL_D RTest test(_L("T_HEAPPAGEALLOC"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    66
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    67
class TestHybridHeap
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    68
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    69
public:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    70
    static TUint8* MemBase(const RHybridHeap * aHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    71
    static void GetHeapMetaData(RHeap& aHeap, TMetaData& aMeta);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    72
    };
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    73
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    74
TUint8* TestHybridHeap::MemBase(const RHybridHeap * aHybridHeap)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    75
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    76
	return aHybridHeap->iMemBase;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    77
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    78
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    79
void TestHybridHeap::GetHeapMetaData(RHeap& aHeap, TMetaData& aMeta)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    80
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    81
    RHybridHeap::STestCommand cmd;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    82
    cmd.iCommand = RHybridHeap::EHeapMetaData;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    83
    TInt ret = aHeap.DebugFunction(RHeap::EHybridHeap, &cmd, 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    84
    test(ret == KErrNone);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    85
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    86
    RHybridHeap* hybridHeap = (RHybridHeap*) cmd.iData;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    87
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    88
    aMeta.iDLOnly              = hybridHeap->iDLOnly;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    89
    aMeta.iLock                = &hybridHeap->iLock;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    90
    aMeta.iChunkSize           = hybridHeap->iChunkSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    91
    aMeta.iSlabThreshold       = hybridHeap->iSlabThreshold;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    92
    aMeta.iSlabInitThreshold   = hybridHeap->iSlabInitThreshold;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    93
    aMeta.iSlabConfigBits      = hybridHeap->iSlabConfigBits;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    94
    aMeta.iPartialPage         = hybridHeap->iPartialPage;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    95
    aMeta.iFullSlab            = hybridHeap->iFullSlab;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    96
    aMeta.iSparePage           = hybridHeap->iSparePage;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    97
    aMeta.iMemBase             = hybridHeap->iMemBase;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    98
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    99
    TInt i;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   100
    TInt count;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   101
    count = sizeof(aMeta.iSizeMap)/sizeof(unsigned char);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   102
    for (i=0; i<count; ++i)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   103
        {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   104
        aMeta.iSizeMap[i] = hybridHeap->iSizeMap[i];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   105
        }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   106
    count = sizeof(aMeta.iSlabAlloc)/sizeof(slabset);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   107
    for (i=0; i<count; ++i)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   108
        {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   109
        aMeta.iSlabAlloc[i].iPartial = hybridHeap->iSlabAlloc[i].iPartial;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   110
        aMeta.iSlabAllocRealRootAddress[i] = &hybridHeap->iSlabAlloc[i].iPartial;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   111
        }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   112
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   113
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   114
LOCAL_C void GetMeta(RHeap& aHeap, TMetaData& aMeta)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   115
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   116
    TestHybridHeap::GetHeapMetaData(aHeap, aMeta);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   117
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   118
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   119
class TestRHeap : public RHeap
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   120
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   121
public:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   122
	void InitTests();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   123
	void Test1(void);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   124
	void Test2(void);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   125
	void Test3(void);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   126
	void CloseTests();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   127
	TUint GetRandomSize(TUint aMaxSize);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   128
	TUint GetRandomIndex(TUint aMaxIndex);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   129
	static void WalkCallback(TAny* aPtr, TCellType aType, TAny* aCell, TInt aLen);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   130
	TBool CheckWalkArrayEmpty();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   131
			
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   132
private:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   133
	RHybridHeap* iHybridHeap;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   134
	RHeap *iHeap;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   135
	TUint8* iMemBase;			     // bottom of Paged/Slab memory (chunk base)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   136
	static TUint iWalkArraySize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   137
	static TUint iWalkArrayIndex;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   138
	static TAny** iWalkArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   139
	TUint iAllocatedArrayIndex;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   140
	TAny** iAllocatedArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   141
	};
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   142
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   143
TUint TestRHeap::iWalkArraySize = 100;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   144
TUint TestRHeap::iWalkArrayIndex = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   145
TAny** TestRHeap::iWalkArrayOfCells = new TAny*[iWalkArraySize];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   146
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   147
void TestRHeap::InitTests()
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   148
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   149
    // Allocate a chunk heap
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   150
	TPtrC testHeap=_L("TESTHEAP");
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   151
	iHeap=User::ChunkHeap(&testHeap,0x1800,0x800000); 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   152
	RHybridHeap::STestCommand cmd;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   153
	cmd.iCommand = RHybridHeap::EHeapMetaData;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   154
	iHeap->DebugFunction(RHeap::EHybridHeap, &cmd, 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   155
	iHybridHeap = (RHybridHeap*) cmd.iData;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   156
	iMemBase = TestHybridHeap::MemBase(iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   157
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   158
	// configure paged heap threshold 16 kB
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   159
	cmd.iCommand = RHybridHeap::ESetConfig;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   160
	cmd.iConfig.iSlabBits = 0x0; //0xabe
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   161
	cmd.iConfig.iDelayedSlabThreshold = 0x40000000;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   162
	cmd.iConfig.iPagePower = 14;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   163
	test(iHeap->DebugFunction(RHeap::EHybridHeap, &cmd, 0) == KErrNone);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   164
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   165
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   166
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   167
TUint TestRHeap::GetRandomSize(TUint aMaxSize)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   168
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   169
	TUint size = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   170
	do
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   171
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   172
		size = Math::Random() & aMaxSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   173
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   174
	while(size < 16384 ||  size > aMaxSize );
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   175
	// subtract debug header size	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   176
	return size - 8;	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   177
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   178
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   179
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   180
TUint TestRHeap::GetRandomIndex(TUint aMaxIndex)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   181
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   182
	TUint index = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   183
	do
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   184
	    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   185
        index = Math::Random() & 0x7F;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   186
	    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   187
    while(index >= aMaxIndex || iWalkArrayOfCells[index] == 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   188
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   189
	return index;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   190
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   191
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   192
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   193
void TestRHeap::WalkCallback(TAny* aPtr, TCellType aCellType, TAny* aBuffer, TInt aLen)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   194
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   195
    if (aLen>16375 && aPtr>0)    // Don't test DL allocator
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   196
        test(aCellType == EGoodAllocatedCell);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   197
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   198
	TUint i = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   199
	for(i=0; i<iWalkArrayIndex; i++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   200
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   201
		if(iWalkArrayOfCells[i] == aBuffer)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   202
		{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   203
			iWalkArrayOfCells[i] = NULL;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   204
			break;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   205
		}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   206
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   207
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   208
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   209
TBool TestRHeap::CheckWalkArrayEmpty()
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   210
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   211
	TUint i = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   212
	for(i=0; i<iWalkArrayIndex; i++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   213
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   214
		if(iWalkArrayOfCells[i])
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   215
		{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   216
			return EFalse;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   217
		}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   218
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   219
	return ETrue;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   220
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   221
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   222
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   223
///////////////////////////////////////////////////////////
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   224
// Test page allocation with various sizes, 16 kB - 8 MB //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   225
// Simple test with fixed sizes.                         //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   226
///////////////////////////////////////////////////////////
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   227
void TestRHeap::Test1(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   228
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   229
	// Allocate and free single paged buffers of different size
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   230
	// Small buffer
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   231
	TAny* p1 = NULL;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   232
	p1=iHeap->Alloc(0x4000);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   233
	test(p1 != NULL && p1 >= iMemBase && p1 < iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   234
	test(iHeap->Count() == 1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   235
	iHeap->Free(p1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   236
	p1 = NULL;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   237
	test(iHeap->Count() == 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   238
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   239
	// Medium buffer
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   240
	p1=iHeap->Alloc(0x20000);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   241
	test(p1 != NULL && p1 >= iMemBase && p1 < iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   242
	test(iHeap->Count() == 1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   243
	iHeap->Free(p1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   244
	p1 = NULL;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   245
	test(iHeap->Count() == 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   246
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   247
	// Large buffer
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   248
	p1=iHeap->Alloc(0x700000);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   249
	test(p1 != NULL && p1 >= iMemBase && p1 < iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   250
	test(iHeap->Count() == 1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   251
	iHeap->Free(p1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   252
	p1 = NULL;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   253
	test(iHeap->Count() == 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   254
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   255
	// Oversized buffer, not allocated
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   256
	p1=iHeap->Alloc(0x900000);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   257
	test(p1 == NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   258
	test(iHeap->Count() == 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   259
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   260
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   261
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   262
///////////////////////////////////////////////////////////////////////////
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   263
// Allocate and free multiple random sized buffers, sizes under 65 kB.   //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   264
// Check that all are allocated succesfully with Count. Free every other //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   265
// of them, check the Count. Allocate more buffers sized under 655 kB    //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   266
// and free all buffers in reverse order. Check all are freed.           //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   267
///////////////////////////////////////////////////////////////////////////
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   268
void TestRHeap::Test2(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   269
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   270
    TInt ArraySize=10;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   271
	TInt ArrayIndex;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   272
	TAny** ArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   273
	ArrayOfCells = new TAny*[ArraySize];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   274
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   275
	// Allocate set of buffers
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   276
	for(ArrayIndex=0; ArrayIndex<ArraySize; ArrayIndex++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   277
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   278
		ArrayOfCells[ArrayIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   279
		ArrayOfCells[ArrayIndex] = iHeap->Alloc(GetRandomSize(0xFFFF));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   280
		test(ArrayOfCells[ArrayIndex] != NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   281
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   282
	test(iHeap->Count() == 10);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   283
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   284
	// Free every other
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   285
	for(ArrayIndex=0; ArrayIndex<ArraySize; ArrayIndex=ArrayIndex+2 )
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   286
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   287
		iHeap->Free(ArrayOfCells[ArrayIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   288
		ArrayOfCells[ArrayIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   289
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   290
	test(iHeap->Count() == 5);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   291
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   292
	TInt ArraySize2=10;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   293
	TInt ArrayIndex2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   294
	TAny** ArrayOfCells2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   295
	ArrayOfCells2 = new TAny*[ArraySize2];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   296
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   297
	// Allocate larger buffers
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   298
	for(ArrayIndex2=0; ArrayIndex2<ArraySize; ArrayIndex2++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   299
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   300
		ArrayOfCells2[ArrayIndex2] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   301
		ArrayOfCells2[ArrayIndex2] = iHeap->Alloc(GetRandomSize(0x7FFFF));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   302
		test(ArrayOfCells2[ArrayIndex2] != NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   303
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   304
	test(iHeap->Count() == 15);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   305
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   306
	// Free all buffers in reverse order
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   307
	for(ArrayIndex=9; ArrayIndex>=0; ArrayIndex-- )
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   308
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   309
		if(ArrayOfCells[ArrayIndex] != 0)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   310
		{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   311
			iHeap->Free(ArrayOfCells[ArrayIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   312
			ArrayOfCells[ArrayIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   313
		}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   314
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   315
	for(ArrayIndex2=9; ArrayIndex2>=0; ArrayIndex2-- )
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   316
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   317
		if(ArrayOfCells2[ArrayIndex2] != 0)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   318
		{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   319
			iHeap->Free(ArrayOfCells2[ArrayIndex2]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   320
			ArrayOfCells2[ArrayIndex2] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   321
		}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   322
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   323
	test(iHeap->Count() == 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   324
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   325
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   326
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   327
///////////////////////////////////////////////////////////////////////
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   328
// Allocate and free multiple random sized buffers. Use              // 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   329
// DebugFunction(EWalk) to check that all allocated cells are found. //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   330
///////////////////////////////////////////////////////////////////////
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   331
void TestRHeap::Test3(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   332
{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   333
    TUint iAllocatedArraySize = 100;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   334
    iAllocatedArrayOfCells = new TAny*[iAllocatedArraySize];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   335
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   336
    // allocate 100 random cells and save them in iAllocatedArrayOfCells
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   337
    for(iAllocatedArrayIndex=0; iAllocatedArrayIndex<iAllocatedArraySize; iAllocatedArrayIndex++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   338
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   339
        iAllocatedArrayOfCells[iAllocatedArrayIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   340
        iAllocatedArrayOfCells[iAllocatedArrayIndex] = iHeap->Alloc(GetRandomSize(0xFFFF));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   341
        test(iAllocatedArrayOfCells[iAllocatedArrayIndex] != NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   342
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   343
    test(iHeap->Count() == 100);    //check that all 100 allocations have succeedeed
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   344
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   345
    // copy iAllocatedArrayOfCells => iWalkArrayOfCells
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   346
    iWalkArrayOfCells = new TAny*[iWalkArrayIndex];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   347
    for(iWalkArrayIndex=0; iWalkArrayIndex<iWalkArraySize; iWalkArrayIndex++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   348
        {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   349
            iWalkArrayOfCells[iWalkArrayIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   350
            iWalkArrayOfCells[iWalkArrayIndex] = iAllocatedArrayOfCells[iWalkArrayIndex];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   351
            test(iWalkArrayOfCells[iWalkArrayIndex] == iAllocatedArrayOfCells[iWalkArrayIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   352
        }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   353
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   354
    //check that walk finds all allocated cells...
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   355
        iHeap->DebugFunction(EWalk, (TAny*)&WalkCallback, (TAny*)this);  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   356
        TBool ret = CheckWalkArrayEmpty();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   357
        test(ret);     // ...and iWalkArrayOfCells is emptied
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   358
        
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   359
	// copy iAllocatedArrayOfCells => iWalkArrayOfCells
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   360
	    iWalkArrayOfCells = new TAny*[iWalkArrayIndex];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   361
	    for(iWalkArrayIndex=0; iWalkArrayIndex<iWalkArraySize; iWalkArrayIndex++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   362
	        {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   363
	            iWalkArrayOfCells[iWalkArrayIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   364
	            iWalkArrayOfCells[iWalkArrayIndex] = iAllocatedArrayOfCells[iWalkArrayIndex];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   365
	            test(iWalkArrayOfCells[iWalkArrayIndex] == iAllocatedArrayOfCells[iWalkArrayIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   366
	        }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   367
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   368
	// free 40 random cells from iWalkArrayOfCells
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   369
	TUint i;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   370
	for (i=0; i<40; i++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   371
	    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   372
        TUint RandomIndex = GetRandomIndex(99);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   373
        iHeap->Free(iWalkArrayOfCells[RandomIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   374
        iWalkArrayOfCells[RandomIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   375
        iAllocatedArrayOfCells[RandomIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   376
	    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   377
	test(iHeap->Count() == 60);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   378
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   379
	//check that walk finds all the remaining allocated cells...
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   380
	iHeap->DebugFunction(EWalk, (TAny*)&WalkCallback, (TAny*)this);  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   381
	ret = CheckWalkArrayEmpty();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   382
	test(ret);     // ...and iWalkArrayOfCells is emptied
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   383
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   384
	// allocate 20 more random cells starting on the first available free cell
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   385
	iAllocatedArrayIndex = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   386
	for (i=0; i<20; i++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   387
	    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   388
        while (iAllocatedArrayOfCells[iAllocatedArrayIndex] != 0)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   389
            {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   390
            iAllocatedArrayIndex++;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   391
            }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   392
        iAllocatedArrayOfCells[iAllocatedArrayIndex] = iHeap->Alloc(GetRandomSize(0xFFFF));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   393
	    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   394
	test(iHeap->Count() == 80);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   395
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   396
	// copy iAllocatedArrayOfCells => iWalkArrayOfCells
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   397
	iWalkArrayOfCells = new TAny*[iWalkArrayIndex];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   398
	    for(iWalkArrayIndex=0; iWalkArrayIndex<iWalkArraySize; iWalkArrayIndex++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   399
	        {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   400
	            iWalkArrayOfCells[iWalkArrayIndex] = 0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   401
	            iWalkArrayOfCells[iWalkArrayIndex] = iAllocatedArrayOfCells[iWalkArrayIndex];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   402
	            test(iWalkArrayOfCells[iWalkArrayIndex] == iAllocatedArrayOfCells[iWalkArrayIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   403
	        }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   404
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   405
	//check that walk finds all the earlier and newly allocated cells...
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   406
	iHeap->DebugFunction(EWalk, (TAny*)&WalkCallback, (TAny*)this);  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   407
	ret = CheckWalkArrayEmpty();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   408
	test(ret);     // ...and iWalkArrayOfCells is emptied
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   409
}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   410
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   411
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   412
void TestRHeap::CloseTests()
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   413
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   414
		// close heap so we don't exceed chunk limit
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   415
		iHeap->Close();  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   416
	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   417
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   418
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   419
GLDEF_C TInt E32Main(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   420
	{
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   421
	test.Title();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   422
	__KHEAP_MARK;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   423
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   424
	TestRHeap T;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   425
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   426
	test.Start(_L("Page Allocator Test"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   427
		    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   428
	TPtrC testHeapM=_L("TESTHEAP-MAIN");
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   429
    RHeap* iHeapM;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   430
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   431
	iHeapM=User::ChunkHeap(&testHeapM,0x1800,0x800000); 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   432
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   433
    TMetaData metaData;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   434
    GetMeta(*iHeapM, metaData);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   435
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   436
    iHeapM->Close();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   437
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   438
    if (metaData.iDLOnly)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   439
        {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   440
        test.Printf(_L("Page allocator is not used, no tests to run.\n"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   441
        __KHEAP_MARKEND;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   442
        test.End();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   443
        return(0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   444
        }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   445
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   446
    test.Next(_L("Init Paged allocator tests"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   447
    T.InitTests();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   448
	test.Next(_L("Test Paged allocator 1"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   449
	T.Test1();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   450
	test.Next(_L("Test Paged allocator 2"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   451
	T.Test2();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   452
	test.Next(_L("Test Paged allocator 3"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   453
	T.Test3();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   454
	T.CloseTests();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   455
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   456
	__KHEAP_CHECK(0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   457
	__KHEAP_MARKEND;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   458
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   459
	test.End();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   460
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   461
	return (0);    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   462
    }