diff -r 000000000000 -r 96e5fb8b040d kerneltest/e32test/buffer/tarraysp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/buffer/tarraysp.cpp Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,517 @@ +// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// e32test\buffer\tarraysp.cpp +// +// + +#include +#include + +GLREF_D RTest test; +GLREF_C TInt Random(); + +LOCAL_D TInt Count=0; + +GLREF_D TLinearOrder Int64Order; + +volatile TReal Absorber; +volatile TInt DummyFlag = 1; + +#undef FOREVER +#define FOREVER while (DummyFlag) + + +LOCAL_C TInt VerySlowInt64Order(const TInt64& a, const TInt64& b) + { + TReal x; + Math::Ln(x, 2.0); + Absorber = x; + if (a < b) + return -1; + if (a == b) + return 0; + return 1; + } + + +LOCAL_C TInt SpeedTest1(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + pS->Signal(); + FOREVER + { + TInt i; + RArray a; + for (i=0; i<1000; i++) + a.Append(Count++); + a.Close(); + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest2(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(8); + pS->Signal(); + FOREVER + { + TInt i; + for (i=0; i<1000; i++) + { + pA->AppendL(Count++); + } + pA->Reset(); + } + delete pA; + return KErrNone; + } + +TInt Total; +LOCAL_C TInt SpeedTest3(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + TInt i; + RArray a; + for (i=0; i<1000; i++) + a.Append(i); + pS->Signal(); + FOREVER + { + TInt total=0; + for (i=0; i<1000; i++) + { + total+=a[i]; + Count++; + } + Total=total; + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest4(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(8); + TInt i; + for (i=0; i<1000; i++) + { + pA->AppendL(i); + } + pS->Signal(); + FOREVER + { + TInt total=0; + for (i=0; i<1000; i++) + { + total+=(*pA)[i]; + Count++; + } + Total=total; + } + delete pA; + return KErrNone; + } + +LOCAL_C TInt SpeedTest5(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + pS->Signal(); + FOREVER + { + TInt i; + RArray a; + for (i=999; i>=0; i--, Count++) + a.InsertInOrder(i); + a.Close(); + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest5a(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + pS->Signal(); + FOREVER + { + TInt i; + RArray a; + for (i=999; i>=0; i--, Count++) + a.InsertInOrderAllowRepeats(0); + a.Close(); + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest6(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(8); + TKeyArrayFix key(0,ECmpTInt); + pS->Signal(); + FOREVER + { + TInt i; + for (i=999; i>=0; i--, Count++) + { + pA->InsertIsqL(i,key); + } + pA->Reset(); + } + delete pA; + return KErrNone; + } + +LOCAL_C TInt SpeedTest7(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + TInt i; + RArray a(1024); + for (i=0; i<1000; i++) + a.Append(Random()); + pS->Signal(); + FOREVER + { + a.Sort(); + for (i=0; i<1000; i++) + a[i]=Random(); + Count++; + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest7b(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + TInt i; + RArray a(1024); + for (i=0; i<1000; i++) + a.Append(MAKE_TINT64(Random(),Random())); + pS->Signal(); + FOREVER + { + a.Sort(Int64Order); + for (i=0; i<1000; i++) + a[i]=MAKE_TINT64(Random(),Random()); + Count++; + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest8(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(1024); + TKeyArrayFix key(0,ECmpTInt); + TInt i; + for (i=0; i<1000; i++) + pA->AppendL(Random()); + pS->Signal(); + FOREVER + { + pA->Sort(key); + for (i=0; i<1000; i++) + (*pA)[i]=Random(); + Count++; + } + delete pA; + return KErrNone; + } + +LOCAL_C TInt SpeedTest8a(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(1024); + TKeyArrayFix key(0,ECmpTInt64); + TInt i; + for (i=0; i<1000; i++) + pA->AppendL(MAKE_TINT64(Random(),Random())); + pS->Signal(); + FOREVER + { + pA->Sort(key); + for (i=0; i<1000; i++) + (*pA)[i]=MAKE_TINT64(Random(),Random()); + Count++; + } + delete pA; + return KErrNone; + } + +LOCAL_C TInt SpeedTest9(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + pS->Signal(); + FOREVER + { + TInt i; + RArray a; + for (i=0; i<1000; i++, Count++) + a.InsertInOrder(Random()); + a.Close(); + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest9b(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + pS->Signal(); + FOREVER + { + TInt i; + RArray a; + for (i=0; i<1000; i++, Count++) + a.InsertInOrder(MAKE_TINT64(Random(),Random()),Int64Order); + a.Close(); + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest9q(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + pS->Signal(); + FOREVER + { + TInt i; + RArray a; + for (i=0; i<1000; i++, Count++) + a.InsertInOrderAllowRepeats(MAKE_TINT64(0,i), &VerySlowInt64Order); + a.Close(); + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest9r(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + pS->Signal(); + FOREVER + { + TInt i; + RArray a; + for (i=0; i<1000; i++, Count++) + a.InsertInOrderAllowRepeats(MAKE_TINT64(0,0), &VerySlowInt64Order); + a.Close(); + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest10(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(8); + TKeyArrayFix key(0,ECmpTInt); + pS->Signal(); + FOREVER + { + TInt i; + for (i=0; i<1000; i++, Count++) + { + pA->InsertIsqAllowDuplicatesL(Random(),key); + } + pA->Reset(); + } + delete pA; + return KErrNone; + } + +LOCAL_C TInt SpeedTest10a(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(8); + TKeyArrayFix key(0,ECmpTInt64); + pS->Signal(); + FOREVER + { + TInt i; + for (i=0; i<1000; i++, Count++) + { + pA->InsertIsqAllowDuplicatesL(MAKE_TINT64(Random(),Random()),key); + } + pA->Reset(); + } + delete pA; + return KErrNone; + } + +LOCAL_C TInt SpeedTest11(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + TInt i; + RArray a(1024); + for (i=0; i<1024; i++) + a.Append(i); + pS->Signal(); + FOREVER + { + for (i=0; i<1024; i++) + { + a.FindInOrder(i^0x2b9); + Count++; + } + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest11b(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + TInt i; + RArray a(1024); + for (i=0; i<1024; i++) + a.Append(MAKE_TINT64(i>>6,i)); + pS->Signal(); + FOREVER + { + for (i=0; i<1024; i++) + { + TInt j=i^0x2b9; + TInt64 x = MAKE_TINT64(j>>6,j); + a.FindInOrder(x,Int64Order); + Count++; + } + } + return KErrNone; + } + +LOCAL_C TInt SpeedTest12(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(8); + TKeyArrayFix key(0,ECmpTInt); + TInt i; + for (i=0; i<1024; i++) + { + pA->AppendL(i); + } + pS->Signal(); + FOREVER + { + for (i=0; i<1024; i++) + { + TInt j; + TInt k=i^0x2b9; + pA->FindIsq(k,key,j); + Count++; + } + } + delete pA; + return KErrNone; + } + +LOCAL_C TInt SpeedTest12a(TAny* aSem) + { + RSemaphore *pS=(RSemaphore*)aSem; + CArrayFixFlat* pA=new CArrayFixFlat(8); + TKeyArrayFix key(0,ECmpTInt64); + TInt i; + for (i=0; i<1024; i++) + { + pA->AppendL(MAKE_TINT64(i>>6,i)); + } + pS->Signal(); + FOREVER + { + for (i=0; i<1024; i++) + { + TInt j; + TInt k=i^0x2b9; + TInt64 x = MAKE_TINT64(k>>6,k); + pA->FindIsq(x,key,j); + Count++; + } + } + delete pA; + return KErrNone; + } + +const TInt KHeapSize=16384; +LOCAL_C TInt DoSpeedTest(TThreadFunction f) + { + RSemaphore sem; + sem.CreateLocal(0); + RThread t; + t.Create(_L("Speedy"),f,KDefaultStackSize,KHeapSize,KHeapSize,&sem); + t.SetPriority(EPriorityLess); + Count=0; + TRequestStatus s; + t.Logon(s); + t.Resume(); + sem.Wait(); + User::After(2000000); + TInt num=Count/2; + t.Kill(0); + User::WaitForRequest(s); + if (t.ExitType()!=EExitKill) + { + TExitCategoryName aExitCategory = t.ExitCategory(); + test.Printf(_L("Exit %d %S %d\n"),t.ExitType(),&aExitCategory,t.ExitReason()); + } + CLOSE_AND_WAIT(t); + sem.Close(); + return num; + } + +GLDEF_C void DoSpeedTests() + { + TInt r; + test.Next(_L("Speed Tests")); + r=DoSpeedTest(SpeedTest1); + test.Printf(_L("RArray append, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest2); + test.Printf(_L("CArrayFixFlat append, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest3); + test.Printf(_L("RArray access, %d in 1 second\n"),r); + test(Total==999*1000/2); + r=DoSpeedTest(SpeedTest4); + test.Printf(_L("CArrayFixFlat access, %d in 1 second\n"),r); + test(Total==999*1000/2); + r=DoSpeedTest(SpeedTest5); + test.Printf(_L("RArray InsertInOrder, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest5a); + test.Printf(_L("RArray InsertInOrder repeats, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest6); + test.Printf(_L("CArrayFixFlat InsertIsqL, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest7); + test.Printf(_L("RArray Sort 1000, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest7b); + test.Printf(_L("RArray Sort 1000, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest8); + test.Printf(_L("CArrayFixFlat Sort 1000, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest8a); + test.Printf(_L("CArrayFixFlat Sort 1000, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest9); + test.Printf(_L("RArray InsertInOrder random, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest9b); + test.Printf(_L("RArray InsertInOrder random, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest9q); + test.Printf(_L("RArray InsertInOrder repeat control, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest9r); + test.Printf(_L("RArray InsertInOrder repeats, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest10); + test.Printf(_L("CArrayFixFlat InsertIsqL random, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest10a); + test.Printf(_L("CArrayFixFlat InsertIsqL random, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest11); + test.Printf(_L("RArray FindInOrder, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest11b); + test.Printf(_L("RArray FindInOrder, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest12); + test.Printf(_L("CArrayFixFlat FindIsqL, %d in 1 second\n"),r); + r=DoSpeedTest(SpeedTest12a); + test.Printf(_L("CArrayFixFlat FindIsqL, %d in 1 second\n"),r); + } +