kerneltest/e32test/heap/t_heapdl.cpp
author hgs
Thu, 10 Jun 2010 11:48:01 +0100
changeset 149 d9f1e5bfe28c
child 252 0a40b8675b23
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_heapdl.cpp
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    15
// Overview:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    16
// Tests RHybridHeap class.
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    17
// API Information:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    18
// RHybridHeap
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    19
// Details:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    20
// 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    21
//
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    22
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    23
#include <e32test.h>
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    24
#include <e32math.h>
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    25
#include <e32def_private.h>
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    26
#include "dla.h"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    27
#include "slab.h"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    28
#include "page_alloc.h"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    29
#include "heap_hybrid.h"
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    30
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    31
const TInt KHeadSize = (TInt)RHeap::EAllocCellSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    32
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    33
class TestHybridHeap
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    34
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    35
public:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    36
  static void TopSize(TInt& aTopSize, const RHybridHeap * aHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    37
  static void DvSize(TInt& aDvSize, const RHybridHeap * aHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    38
  static void SmallMap(TUint& aSmallMap, const RHybridHeap * aHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    39
  static void TreeMap(TUint& aTreeMap, const RHybridHeap * aHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    40
  static void TrimCheck(TInt& aTrimCheck, const RHybridHeap * aHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    41
  static void GrowBy(TInt& aGrowBy, const RHybridHeap * aHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    42
  static void PageSize(TInt& aPageSize, const RHybridHeap * aHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    43
  };
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    44
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    45
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    46
void TestHybridHeap::TopSize(TInt& aTopSize, const RHybridHeap * aHybridHeap)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    47
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    48
  aTopSize = aHybridHeap->iGlobalMallocState.iTopSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    49
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    50
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    51
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    52
void TestHybridHeap::DvSize(TInt& aDvSize, const RHybridHeap * aHybridHeap)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    53
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    54
  aDvSize = aHybridHeap->iGlobalMallocState.iDvSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    55
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    56
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    57
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    58
void TestHybridHeap::SmallMap(TUint& aSmallMap, const RHybridHeap * aHybridHeap)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    59
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    60
  aSmallMap = aHybridHeap->iGlobalMallocState.iSmallMap;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    61
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    62
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    63
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    64
void TestHybridHeap::TreeMap(TUint& aTreeMap, const RHybridHeap * aHybridHeap)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    65
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    66
  aTreeMap = aHybridHeap->iGlobalMallocState.iTreeMap;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    67
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    68
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    69
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    70
void TestHybridHeap::TrimCheck(TInt& aTrimCheck, const RHybridHeap * aHybridHeap)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    71
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    72
  aTrimCheck = aHybridHeap->iGlobalMallocState.iTrimCheck;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    73
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    74
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    75
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    76
void TestHybridHeap::GrowBy(TInt& aGrowBy, const RHybridHeap * aHybridHeap)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    77
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    78
  aGrowBy = aHybridHeap->iGrowBy;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    79
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    80
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    81
void TestHybridHeap::PageSize(TInt& aPageSize, const RHybridHeap * aHybridHeap)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    82
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    83
  aPageSize = aHybridHeap->iPageSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    84
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    85
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    86
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    87
LOCAL_D RTest test(_L("T_HEAPDL"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    88
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    89
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    90
class TestRHeap
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    91
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    92
public:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    93
  void InitTests();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    94
  void Test1(void);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    95
  void Test2(void);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    96
  void Test3(void);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    97
  void Test4(void);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    98
  void CloseTests();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
    99
private:
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   100
  RHybridHeap* iHybridHeap;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   101
  RHeap *iHeap;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   102
  };
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   103
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   104
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   105
void TestRHeap::InitTests()
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   106
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   107
  // Allocate a chunk heap
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   108
  TPtrC testHeap=_L("TESTHEAP");
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   109
  iHeap=User::ChunkHeap(&testHeap,0x1800,0x16000);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   110
        
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   111
  RHybridHeap::STestCommand cmd;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   112
  cmd.iCommand = RHybridHeap::EHeapMetaData;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   113
  iHeap->DebugFunction(RHeap::EHybridHeap, (TAny*)&cmd );
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   114
  iHybridHeap = (RHybridHeap*) cmd.iData;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   115
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   116
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   117
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   118
void TestRHeap::Test1(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   119
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   120
  //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   121
  //  Splitting a new cell off 'top' chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   122
  //  Growing and shrinking 'top' chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   123
  //  Coalesceing of adjacent free cells
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   124
  //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   125
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   126
  TInt topSizeBefore, topSizeAfter, allocSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   127
  TInt growBy, pageSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   128
  TestHybridHeap::GrowBy(growBy,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   129
  TestHybridHeap::PageSize(pageSize,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   130
        
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   131
  //Splitting a new cell off 'top' chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   132
  TestHybridHeap::TopSize(topSizeBefore,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   133
  TAny* p1=iHeap->Alloc(0x256);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   134
  TestHybridHeap::TopSize(topSizeAfter,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   135
  test(topSizeBefore > topSizeAfter);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   136
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   137
  iHeap->Free(p1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   138
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   139
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   140
  //Growing 'top' chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   141
  test(iHeap!=NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   142
  TestHybridHeap::TopSize(topSizeBefore,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   143
  p1=iHeap->Alloc(pageSize*2); 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   144
  test(p1!=NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   145
  allocSize=iHeap->AllocLen(p1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   146
  TestHybridHeap::TopSize(topSizeAfter,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   147
  test(topSizeBefore + growBy == topSizeAfter+allocSize+KHeadSize);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   148
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   149
  //Splitting a new cell off 'top' chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   150
  TAny *p2=iHeap->Alloc(pageSize/8); 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   151
  test(p2!=NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   152
  //Splitting a new cell off 'top' chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   153
  TAny *p3=iHeap->Alloc(pageSize/2); 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   154
  test(p3!=NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   155
  //Growing 'top' chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   156
  TAny *p4=iHeap->Alloc(pageSize*2); 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   157
  test(p4!=NULL);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   158
  //Take allocSize of p4
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   159
  allocSize=iHeap->AllocLen(p4);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   160
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   161
  //Shrinking 'top' chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   162
  TInt trimCheck;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   163
  TestHybridHeap::TopSize(topSizeBefore,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   164
  iHeap->Free(p4);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   165
  TestHybridHeap::TopSize(topSizeAfter,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   166
  TestHybridHeap::TrimCheck(trimCheck,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   167
  test(topSizeAfter + trimCheck == topSizeBefore+allocSize+KHeadSize);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   168
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   169
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   170
  //Insert chunk into treebin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   171
  TUint treeMap,treeMap2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   172
  TestHybridHeap::TreeMap(treeMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   173
  test(treeMap==0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   174
  iHeap->Free(p2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   175
  TestHybridHeap::TreeMap(treeMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   176
  test(treeMap>0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   177
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   178
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   179
  //Coalesce adjacent free cells and insert chunk into treebin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   180
  TestHybridHeap::TreeMap(treeMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   181
  iHeap->Free(p1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   182
  TestHybridHeap::TreeMap(treeMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   183
  test(treeMap < treeMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   184
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   185
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   186
  //free last allocation
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   187
  iHeap->Free(p3);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   188
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   189
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   190
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   191
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   192
void TestRHeap::Test2(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   193
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   194
  //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   195
  // Allocation of exact sized cells from 'small cell' lists (smallbin)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   196
  // Freeing of exact sized cells back to 'small cell' lists (smallbin)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   197
  //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   198
  TInt ArraySize=32;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   199
  TInt cellSize=0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   200
  TInt topSizeBefore, topSizeAfter;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   201
     
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   202
  TAny** ArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   203
  ArrayOfCells= new TAny*[ArraySize];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   204
  TInt ArrayIndex;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   205
  // Allocate exact sized small cells 8,16,32,40--->
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   206
  // and put them to the array. They are allocated from TOP chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   207
  for(ArrayIndex=0; ArrayIndex<ArraySize;ArrayIndex++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   208
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   209
    TestHybridHeap::TopSize(topSizeBefore,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   210
    cellSize=cellSize+8;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   211
    ArrayOfCells[ArrayIndex]=iHeap->Alloc(cellSize);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   212
    TestHybridHeap::TopSize(topSizeAfter,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   213
    test(topSizeBefore > topSizeAfter);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   214
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   215
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   216
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   217
  TUint smallMap, smallMap2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   218
  TInt dvSize, dvSize2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   219
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   220
  test(smallMap == 0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   221
  // Free some of small cells from the array. So they are inserted
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   222
  // to the smallbin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   223
  for(ArrayIndex=2; ArrayIndex<ArraySize-1; ArrayIndex+=5)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   224
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   225
    TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   226
    iHeap->Free(ArrayOfCells[ArrayIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   227
    TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   228
    test(smallMap<smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   229
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   230
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   231
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   232
  // Allocate exact sized cells from smallbin (or Designated Victim)   
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   233
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   234
  TAny* p1=iHeap->Alloc(32);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   235
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   236
  test(smallMap>smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   237
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   238
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   239
  TestHybridHeap::DvSize(dvSize,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   240
  TAny* p2=iHeap->Alloc(32);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   241
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   242
  TestHybridHeap::DvSize(dvSize2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   243
  if(dvSize <= dvSize2)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   244
    test(smallMap>smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   245
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   246
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   247
  TestHybridHeap::DvSize(dvSize,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   248
  TAny* p3=iHeap->Alloc(32);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   249
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   250
  TestHybridHeap::DvSize(dvSize2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   251
  if(dvSize <= dvSize2)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   252
  	test(smallMap>smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   253
   
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   254
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   255
  TestHybridHeap::DvSize(dvSize,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   256
  TAny* p4=iHeap->Alloc(32);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   257
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   258
  TestHybridHeap::DvSize(dvSize2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   259
  if(dvSize <= dvSize2)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   260
    test(smallMap>smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   261
   
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   262
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   263
  TestHybridHeap::DvSize(dvSize,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   264
  TAny* p5=iHeap->Alloc(48);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   265
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   266
  TestHybridHeap::DvSize(dvSize2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   267
  if(dvSize <= dvSize2)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   268
    test(smallMap>smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   269
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   270
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   271
  TestHybridHeap::DvSize(dvSize,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   272
  TAny* p6=iHeap->Alloc(64);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   273
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   274
  TestHybridHeap::DvSize(dvSize2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   275
  if(dvSize <= dvSize2)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   276
    test(smallMap>smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   277
   
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   278
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   279
  TestHybridHeap::DvSize(dvSize,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   280
  TAny* p7=iHeap->Alloc(80);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   281
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   282
  TestHybridHeap::DvSize(dvSize2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   283
  if(dvSize <= dvSize2)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   284
    test(smallMap>smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   285
   
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   286
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   287
  TestHybridHeap::DvSize(dvSize,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   288
  TAny* p8=iHeap->Alloc(96);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   289
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   290
  TestHybridHeap::DvSize(dvSize2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   291
  if(dvSize <= dvSize2)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   292
    test(smallMap>smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   293
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   294
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   295
  // Freeing of exact sized cells back to smallbin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   296
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   297
  iHeap->Free(p1);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   298
  iHeap->Free(p2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   299
  iHeap->Free(p3);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   300
  iHeap->Free(p4);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   301
  iHeap->Free(p5);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   302
  iHeap->Free(p6);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   303
  iHeap->Free(p7);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   304
  iHeap->Free(p8);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   305
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   306
  test(smallMap < smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   307
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   308
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   309
  // Now free rest of the array with Reset
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   310
  iHeap->Reset();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   311
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   312
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   313
  delete [] ArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   314
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   315
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   316
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   317
void TestRHeap::Test3(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   318
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   319
  //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   320
  // Allocation of approximate sized cells from 'small cell' lists (smallbin)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   321
  //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   322
  TInt ArraySize=32;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   323
  TInt cellSize=0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   324
  TAny** ArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   325
  ArrayOfCells= new TAny*[ArraySize];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   326
  TInt ArrayIndex;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   327
  TInt topSizeBefore, topSizeAfter;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   328
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   329
  // Allocate small approximate sized cells and put
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   330
  //them to the array. They are allocated from TOP chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   331
  TUint8 randomSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   332
  for(ArrayIndex=0; ArrayIndex<ArraySize;ArrayIndex++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   333
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   334
    TestHybridHeap::TopSize(topSizeBefore,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   335
    do
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   336
      {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   337
      randomSize= (TUint8)Math::Random();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   338
      }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   339
    while (randomSize>240);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   340
       
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   341
  	cellSize=randomSize;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   342
  	ArrayOfCells[ArrayIndex]=iHeap->Alloc(cellSize);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   343
  	TestHybridHeap::TopSize(topSizeAfter,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   344
  	test(topSizeBefore > topSizeAfter);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   345
  	}
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   346
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   347
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   348
  TUint smallMap, smallMap2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   349
  // Free some of allocated cells from the array. So they are inserted
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   350
  // to the smallbin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   351
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   352
  for(ArrayIndex=2; ArrayIndex<ArraySize-1; ArrayIndex+=5)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   353
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   354
    iHeap->Free(ArrayOfCells[ArrayIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   355
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   356
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   357
  test(smallMap<=smallMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   358
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   359
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   360
  // Allocate approximate sized cells from smallbin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   361
  TInt ArraySize2=6;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   362
  TInt cellSize2=0;    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   363
  TAny** ArrayOfCells2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   364
  ArrayOfCells2= new TAny*[ArraySize2];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   365
  TInt ArrayIndex2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   366
  TestHybridHeap::SmallMap(smallMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   367
  for(ArrayIndex2=0; ArrayIndex2<ArraySize2;ArrayIndex2++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   368
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   369
    TUint8 randomSize2 = (TUint8)Math::Random();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   370
    cellSize2=(randomSize2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   371
    ArrayOfCells2[ArrayIndex2]=iHeap->Alloc(cellSize2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   372
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   373
  TestHybridHeap::SmallMap(smallMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   374
  test(smallMap>=smallMap2);              
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   375
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   376
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   377
  // Freeing of approximate sized cells back to smallbin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   378
  for(ArrayIndex2=0; ArrayIndex2<ArraySize2-1; ArrayIndex2+=1)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   379
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   380
    iHeap->Free(ArrayOfCells2[ArrayIndex2]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   381
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   382
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   383
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   384
  // Now free rest of the array with Reset
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   385
  iHeap->Reset();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   386
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   387
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   388
  delete [] ArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   389
  delete [] ArrayOfCells2; 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   390
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   391
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   392
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   393
void TestRHeap::Test4(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   394
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   395
  //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   396
  // Allocation of approximate sized cells from digital trees (treebin) and splitting
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   397
  // Freeing of approximate sized cells back to digital trees (treebin)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   398
  //
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   399
  TInt ArraySize=32;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   400
  TInt cellSize=0;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   401
  TAny** ArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   402
  ArrayOfCells= new TAny*[ArraySize];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   403
  TInt ArrayIndex;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   404
        
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   405
  // Allocate approximate sized cells bigger than 256
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   406
  // and put them to the array. They are allocated from TOP chunk
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   407
  for(ArrayIndex=0; ArrayIndex<ArraySize;ArrayIndex++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   408
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   409
    TUint8 randomSize = (TUint8)Math::Random();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   410
    cellSize=(randomSize+256);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   411
    ArrayOfCells[ArrayIndex]=iHeap->Alloc(cellSize);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   412
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   413
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   414
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   415
  TUint treeMap,treeMap2;    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   416
  // Free some of allocated cells from the array. So they are inserted
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   417
  // to the treebin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   418
  for(ArrayIndex=2; ArrayIndex<ArraySize-1; ArrayIndex+=5)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   419
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   420
    TestHybridHeap::TreeMap(treeMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   421
    iHeap->Free(ArrayOfCells[ArrayIndex]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   422
    TestHybridHeap::TreeMap(treeMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   423
    test(treeMap <= treeMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   424
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   425
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   426
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   427
  // Allocate approximate sized cells from treebin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   428
  TInt ArraySize2=16;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   429
  TInt cellSize2=0;    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   430
  TAny** ArrayOfCells2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   431
  ArrayOfCells2= new TAny*[ArraySize2];
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   432
  TInt ArrayIndex2;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   433
  for(ArrayIndex2=0; ArrayIndex2<ArraySize2;ArrayIndex2++)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   434
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   435
    TestHybridHeap::TreeMap(treeMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   436
    TUint8 randomSize2 = (TUint8)Math::Random();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   437
    cellSize2=(randomSize2+256);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   438
    ArrayOfCells2[ArrayIndex2]=iHeap->Alloc(cellSize2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   439
    TestHybridHeap::TreeMap(treeMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   440
    test(treeMap >= treeMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   441
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   442
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   443
  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   444
  // Freeing of approximate sized cells back to treebin
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   445
  TestHybridHeap::TreeMap(treeMap,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   446
  for(ArrayIndex2=0; ArrayIndex2<ArraySize2-1; ArrayIndex2+=1)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   447
    {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   448
    iHeap->Free(ArrayOfCells2[ArrayIndex2]);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   449
    }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   450
  TestHybridHeap::TreeMap(treeMap2,iHybridHeap);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   451
  test(treeMap <= treeMap2);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   452
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   453
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   454
  // Now free rest of the array with Reset
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   455
  iHeap->Reset();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   456
  iHeap->Check();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   457
    
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   458
  delete [] ArrayOfCells;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   459
  delete [] ArrayOfCells2; 
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   460
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   461
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   462
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   463
void TestRHeap::CloseTests()
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   464
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   465
  // close heap so we don't exceed chunk limit
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   466
  iHeap->Close();  
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   467
  }
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   468
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   469
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   470
GLDEF_C TInt E32Main(void)
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   471
  {
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   472
  test.Title();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   473
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   474
  __KHEAP_MARK;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   475
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   476
  TestRHeap T;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   477
  test.Start(_L("Init DL allocator tests"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   478
  T.InitTests();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   479
  test.Next(_L("Test DL allocator 1"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   480
  T.Test1();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   481
  test.Next(_L("Test DL allocator 2"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   482
  T.Test2();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   483
  test.Next(_L("Test DL allocator 3"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   484
  T.Test3();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   485
  test.Next(_L("Test DL allocator 4"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   486
  T.Test4();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   487
  test.Next(_L("Close DL allocator tests"));
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   488
  T.CloseTests();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   489
	
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   490
  __KHEAP_CHECK(0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   491
  __KHEAP_MARKEND;
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   492
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   493
  test.End();
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   494
  return(0);
d9f1e5bfe28c 201021_18
hgs
parents:
diff changeset
   495
  }