679 } |
679 } |
680 } |
680 } |
681 } |
681 } |
682 delete pA; |
682 delete pA; |
683 } |
683 } |
|
684 |
|
685 |
|
686 void TestSelectiveAlloc(TInt aSize) |
|
687 { |
|
688 test.Printf(_L("TestSelectiveAlloc %d\n"),aSize); |
|
689 TBitMapAllocator* pA=TBitMapAllocator::New(aSize, ETrue); |
|
690 test(pA!=NULL); |
|
691 test(pA->Avail()==aSize); |
|
692 // Allocate whole free bma |
|
693 test_Equal(aSize, pA->SelectiveAlloc(0, aSize)); |
|
694 test_Equal(0,pA->Avail()); |
|
695 // Allocate whole full bma |
|
696 test_Equal(0, pA->SelectiveAlloc(0, aSize)); |
|
697 test_Equal(0,pA->Avail()); |
|
698 TInt i; |
|
699 TInt j; |
|
700 TInt l; |
|
701 for (i=2; i<8; ++i) |
|
702 { |
|
703 for (l=1; l<=aSize; ++l) |
|
704 { |
|
705 new (pA) TBitMapAllocator(aSize, ETrue); |
|
706 for (j=0; j<aSize; j+=i) |
|
707 pA->Alloc(j,1); |
|
708 TInt orig=pA->Avail(); |
|
709 test_Equal(aSize-(aSize+i-1)/i, orig); |
|
710 TUint newAllocs = pA->SelectiveAlloc(0,l); |
|
711 TInt allocated = orig - pA->Avail(); |
|
712 test_Equal(allocated, newAllocs); |
|
713 test_Equal(l - (l+i-1)/i, allocated); |
|
714 Check(*pA); |
|
715 } |
|
716 } |
|
717 for (i=0; i<=Min(32,aSize-1); ++i) |
|
718 { |
|
719 for (l=1; l<=aSize-i; ++l) |
|
720 { |
|
721 for (j=1; j<=aSize; ++j) |
|
722 { |
|
723 new (pA) TBitMapAllocator(aSize, ETrue); |
|
724 pA->Alloc(i,l); |
|
725 test_Equal(aSize-l, pA->Avail()); |
|
726 TUint newAllocs = pA->SelectiveAlloc(0,j); |
|
727 TUint allocated = j - Max(0,Min(i+l,j)-i); |
|
728 test_Equal(allocated, newAllocs); |
|
729 test_Equal(pA->Avail(), aSize-l-allocated); |
|
730 test(!pA->NotAllocated(0,j)); |
|
731 if (j>=i && j<i+l) |
|
732 test(!pA->NotAllocated(0,j+1)); |
|
733 Check(*pA); |
|
734 } |
|
735 } |
|
736 } |
|
737 delete pA; |
|
738 } |
|
739 |
684 |
740 |
685 TBitMapAllocator* DoSetupBMA(TInt aSize, VA_LIST aList) |
741 TBitMapAllocator* DoSetupBMA(TInt aSize, VA_LIST aList) |
686 { |
742 { |
687 TBitMapAllocator* pA=TBitMapAllocator::New(aSize, EFalse); |
743 TBitMapAllocator* pA=TBitMapAllocator::New(aSize, EFalse); |
688 test(pA!=NULL); |
744 test(pA!=NULL); |
1244 TestSelectiveFree(3); |
1300 TestSelectiveFree(3); |
1245 TestSelectiveFree(31); |
1301 TestSelectiveFree(31); |
1246 TestSelectiveFree(128); |
1302 TestSelectiveFree(128); |
1247 TestSelectiveFree(149); |
1303 TestSelectiveFree(149); |
1248 |
1304 |
|
1305 TestSelectiveAlloc(3); |
|
1306 TestSelectiveAlloc(31); |
|
1307 TestSelectiveAlloc(128); |
|
1308 TestSelectiveAlloc(149); |
|
1309 |
1249 TestAllocConsecutive(); |
1310 TestAllocConsecutive(); |
1250 |
1311 |
1251 TestChain(); |
1312 TestChain(); |
1252 |
1313 |
1253 __UHEAP_MARKEND; |
1314 __UHEAP_MARKEND; |