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