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\int_arr.cpp sl@0: // sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: sl@0: #define NUM_TESTS 500 sl@0: sl@0: GLREF_D RTest test; sl@0: GLREF_C TInt Random(); sl@0: sl@0: struct SInt sl@0: { sl@0: SInt(TInt a) {i=a;} sl@0: operator TInt() {return i;} sl@0: sl@0: TInt i; sl@0: }; sl@0: sl@0: LOCAL_C TInt IntAppendAndAccessTest(TInt aCount, TInt aNumTests, TInt aRange) sl@0: { sl@0: TInt n; sl@0: for (n=0; n a; sl@0: TInt *pA=(TInt*)User::Alloc(aCount*sizeof(TInt)); sl@0: if (!pA) sl@0: { sl@0: a.Close(); sl@0: return -65535; sl@0: } sl@0: TInt i; sl@0: for (i=0; i a; sl@0: TInt i; sl@0: for (i=0; i a; sl@0: TInt *pA=(TInt*)User::Alloc(aCount*sizeof(TInt)); sl@0: if (!pA) sl@0: { sl@0: a.Close(); sl@0: return -65535; sl@0: } sl@0: TInt i; sl@0: for (i=0; ii) sl@0: { sl@0: a.Close(); sl@0: return -2; sl@0: } sl@0: TInt x=Random()&aRange; sl@0: r=a.Find(x); sl@0: if (r<0) sl@0: { sl@0: TInt j; sl@0: for (j=0; j a; sl@0: TInt *pA=(TInt*)User::Alloc(aCount*sizeof(TInt)); sl@0: if (!pA) sl@0: { sl@0: a.Close(); sl@0: return -65535; sl@0: } sl@0: TInt i=0; sl@0: TInt y=-256; sl@0: for(i=0; i=0 sl@0: a.Append(y); sl@0: pA[i]=y; sl@0: y+=x; sl@0: } sl@0: if (a.Count()!=aCount) sl@0: { sl@0: a.Close(); sl@0: return -1; sl@0: } sl@0: for (i=0; i sq; sl@0: for (i=0; i<1024; i++) sl@0: { sl@0: TInt j=i*i; sl@0: sq.Append(j); sl@0: } sl@0: for (i=0; i<10000; i++) sl@0: { sl@0: TInt x=Random()&1023; sl@0: TInt y=x*x; sl@0: TInt r=sq.FindInOrder(y); sl@0: if (r!=x) sl@0: { sl@0: sq.Close(); sl@0: return -1; sl@0: } sl@0: } sl@0: sq.Close(); sl@0: return 0; sl@0: } sl@0: sl@0: LOCAL_C TInt IntInsertInOrderTest(TInt aCount, TInt aNumTests, TInt aRange) sl@0: { sl@0: TInt n; sl@0: for (n=0; n a; sl@0: RArray b; sl@0: RArray c; sl@0: TInt i; sl@0: TInt cc=0; sl@0: for (i=0; ib[i+1]) sl@0: { sl@0: a.Close(); sl@0: b.Close(); sl@0: c.Close(); sl@0: return -3; sl@0: } sl@0: } sl@0: for (i=0; i=c[i+1]) sl@0: { sl@0: a.Close(); sl@0: b.Close(); sl@0: c.Close(); sl@0: return -8; sl@0: } sl@0: if (a.Find(c[i])<0) sl@0: { sl@0: a.Close(); sl@0: b.Close(); sl@0: c.Close(); sl@0: return -9; sl@0: } sl@0: } sl@0: a.Close(); sl@0: b.Close(); sl@0: c.Close(); sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: LOCAL_C TInt IntInsertInOrderTest2() sl@0: { sl@0: TInt i; sl@0: RArray sq; sl@0: for (i=0; i<1024; i++) sl@0: { sl@0: TInt j=i*i; sl@0: sq.InsertInOrder(j); sl@0: sq.InsertInOrder(-j); sl@0: } sl@0: if (sq.Count()!=2047) sl@0: { sl@0: sq.Close(); sl@0: return -1; sl@0: } sl@0: for (i=0; i<2047; i++) sl@0: { sl@0: TInt y=0; sl@0: if (i<1023) sl@0: y=-(1023-i)*(1023-i); sl@0: else if (i==1023) sl@0: y=0; sl@0: else if (i>1023) sl@0: y=(i-1023)*(i-1023); sl@0: if (sq[i]!=y) sl@0: { sl@0: sq.Close(); sl@0: return -2; sl@0: } sl@0: } sl@0: sq.Close(); sl@0: return 0; sl@0: } sl@0: sl@0: LOCAL_C TInt IntSortTest(TInt aCount, TInt aNumTests, TInt aRange) sl@0: { sl@0: TInt n; sl@0: for (n=0; n a; sl@0: RArray b; sl@0: TInt i; sl@0: for (i=0; i a; sl@0: TInt *pA=(TInt*)User::Alloc(aCount*sizeof(TInt)); sl@0: if (!pA) sl@0: { sl@0: a.Close(); sl@0: return -65535; sl@0: } sl@0: TInt i; sl@0: for (i=0; i a; sl@0: TInt i; sl@0: for (i=0; i a; sl@0: TInt *pA=(TInt*)User::Alloc(aCount*sizeof(TInt)); sl@0: if (!pA) sl@0: { sl@0: a.Close(); sl@0: return -65535; sl@0: } sl@0: TInt i; sl@0: for (i=0; ii) sl@0: { sl@0: a.Close(); sl@0: return -2; sl@0: } sl@0: TInt x=Random()&aRange; sl@0: r=a.Find(x); sl@0: if (r<0) sl@0: { sl@0: TInt j; sl@0: for (j=0; j a; sl@0: TInt *pA=(TInt*)User::Alloc(aCount*sizeof(TInt)); sl@0: if (!pA) sl@0: { sl@0: a.Close(); sl@0: return -65535; sl@0: } sl@0: TInt i=0; sl@0: TInt y=-256; sl@0: for(i=0; i=0 sl@0: a.Append(y); sl@0: pA[i]=y; sl@0: y+=x; sl@0: } sl@0: if (a.Count()!=aCount) sl@0: { sl@0: a.Close(); sl@0: return -1; sl@0: } sl@0: for (i=0; i sq; sl@0: for (i=0; i<1024; i++) sl@0: { sl@0: TInt j=i*i; sl@0: sq.Append(j); sl@0: } sl@0: for (i=0; i<10000; i++) sl@0: { sl@0: TInt x=Random()&1023; sl@0: TInt y=x*x; sl@0: TInt r=sq.FindInSignedKeyOrder(y); sl@0: if (r!=x) sl@0: { sl@0: sq.Close(); sl@0: return -1; sl@0: } sl@0: } sl@0: sq.Close(); sl@0: return 0; sl@0: } sl@0: sl@0: LOCAL_C TInt SIntInsertInOrderTest(TInt aCount, TInt aNumTests, TInt aRange) sl@0: { sl@0: TInt n; sl@0: for (n=0; n a; sl@0: RArray b; sl@0: RArray c; sl@0: TInt i; sl@0: TInt cc=0; sl@0: for (i=0; ib[i+1]) sl@0: { sl@0: a.Close(); sl@0: b.Close(); sl@0: c.Close(); sl@0: return -3; sl@0: } sl@0: } sl@0: for (i=0; i=c[i+1]) sl@0: { sl@0: a.Close(); sl@0: b.Close(); sl@0: c.Close(); sl@0: return -8; sl@0: } sl@0: if (a.Find(c[i])<0) sl@0: { sl@0: a.Close(); sl@0: b.Close(); sl@0: c.Close(); sl@0: return -9; sl@0: } sl@0: } sl@0: a.Close(); sl@0: b.Close(); sl@0: c.Close(); sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: LOCAL_C TInt SIntInsertInOrderTest2() sl@0: { sl@0: TInt i; sl@0: RArray sq; sl@0: for (i=0; i<1024; i++) sl@0: { sl@0: TInt j=i*i; sl@0: sq.InsertInSignedKeyOrder(j); sl@0: sq.InsertInSignedKeyOrder(-j); sl@0: } sl@0: if (sq.Count()!=2047) sl@0: { sl@0: sq.Close(); sl@0: return -1; sl@0: } sl@0: for (i=0; i<2047; i++) sl@0: { sl@0: TInt y=0; sl@0: if (i<1023) sl@0: y=-(1023-i)*(1023-i); sl@0: else if (i==1023) sl@0: y=0; sl@0: else if (i>1023) sl@0: y=(i-1023)*(i-1023); sl@0: if (sq[i]!=y) sl@0: { sl@0: sq.Close(); sl@0: return -2; sl@0: } sl@0: } sl@0: sq.Close(); sl@0: return 0; sl@0: } sl@0: sl@0: LOCAL_C TInt SIntSortTest(TInt aCount, TInt aNumTests, TInt aRange) sl@0: { sl@0: TInt n; sl@0: for (n=0; n a; sl@0: RArray b; sl@0: TInt i; sl@0: for (i=0; i a; sl@0: TInt i; sl@0: TInt v = 0; sl@0: TInt first, last, any; sl@0: for (i=0; i<101; ++i) sl@0: { sl@0: if (v*v=0 && first=0 && last<=a.Count()); sl@0: test(any>=first && any a; sl@0: RArray b; sl@0: TInt i; sl@0: for (i=0; i>1); sl@0: a.Append(x); sl@0: b.InsertInOrderAllowRepeats(x); sl@0: } sl@0: a.Sort(); sl@0: test(a.Count()==aCount); sl@0: test(b.Count()==aCount); sl@0: for (i=0; i>1); i<=(aRange>>1); ++i) sl@0: { sl@0: TInt first = a.SpecificFindInOrder(i, EArrayFindMode_First); sl@0: TInt last = a.SpecificFindInOrder(i, EArrayFindMode_Last); sl@0: TInt any = a.SpecificFindInOrder(i, EArrayFindMode_Any); sl@0: TInt fi, li, ai; sl@0: TInt first2 = a.SpecificFindInOrder(i, fi, EArrayFindMode_First); sl@0: TInt last2 = a.SpecificFindInOrder(i, li, EArrayFindMode_Last); sl@0: TInt any2 = a.SpecificFindInOrder(i, ai, EArrayFindMode_Any); sl@0: ++ntot; sl@0: if (first < 0) sl@0: { sl@0: test(first == KErrNotFound); sl@0: test(first == last); sl@0: test(first == any); sl@0: test(first == first2); sl@0: test(first == last2); sl@0: test(first == any2); sl@0: test(fi == li); sl@0: test(fi == ai); sl@0: test(li==aCount || a[li]>i); sl@0: test(li==0 || a[li-1]i); sl@0: test(ai>=fi && ai 1) sl@0: ++nrpt; sl@0: } sl@0: } sl@0: a.Close(); sl@0: b.Close(); sl@0: } sl@0: test.Printf(_L("ntot=%d nmiss=%d nrpt=%d\n"), ntot, nmiss, nrpt); sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt SIntSpecificFindTests2(TInt aCount, TInt aNumTests, TInt aRange) sl@0: { sl@0: TInt n; sl@0: TInt nmiss = 0; sl@0: TInt nrpt = 0; sl@0: TInt ntot = 0; sl@0: for (n=0; n a; sl@0: RArray b; sl@0: TInt i; sl@0: for (i=0; i>1); sl@0: a.Append(x); sl@0: b.InsertInSignedKeyOrderAllowRepeats(x); sl@0: } sl@0: a.SortSigned(); sl@0: test(a.Count()==aCount); sl@0: test(b.Count()==aCount); sl@0: for (i=0; i>1); i<=(aRange>>1); ++i) sl@0: { sl@0: TInt first = a.SpecificFindInSignedKeyOrder(i, EArrayFindMode_First); sl@0: TInt last = a.SpecificFindInSignedKeyOrder(i, EArrayFindMode_Last); sl@0: TInt any = a.SpecificFindInSignedKeyOrder(i, EArrayFindMode_Any); sl@0: TInt fi, li, ai; sl@0: TInt first2 = a.SpecificFindInSignedKeyOrder(i, fi, EArrayFindMode_First); sl@0: TInt last2 = a.SpecificFindInSignedKeyOrder(i, li, EArrayFindMode_Last); sl@0: TInt any2 = a.SpecificFindInSignedKeyOrder(i, ai, EArrayFindMode_Any); sl@0: ++ntot; sl@0: if (first < 0) sl@0: { sl@0: test(first == KErrNotFound); sl@0: test(first == last); sl@0: test(first == any); sl@0: test(first == first2); sl@0: test(first == last2); sl@0: test(first == any2); sl@0: test(fi == li); sl@0: test(fi == ai); sl@0: test(li==aCount || a[li]>i); sl@0: test(li==0 || a[li-1]i); sl@0: test(ai>=fi && ai 1) sl@0: ++nrpt; sl@0: } sl@0: } sl@0: a.Close(); sl@0: b.Close(); sl@0: } sl@0: test.Printf(_L("ntot=%d nmiss=%d nrpt=%d\n"), ntot, nmiss, nrpt); sl@0: return KErrNone; sl@0: } sl@0: sl@0: GLDEF_C void DoIntArrayTests() sl@0: { sl@0: test.Start(_L("Signed Integer Arrays...")); sl@0: sl@0: test.Next(_L("AppendAndAccess tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(IntAppendAndAccessTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(IntAppendAndAccessTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range all")); sl@0: test(IntAppendAndAccessTest(100,NUM_TESTS,-1)==KErrNone); sl@0: sl@0: test.Next(_L("Remove tests...")); sl@0: test(IntRemoveTest()==KErrNone); sl@0: sl@0: test.Next(_L("Find tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(IntFindTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(IntFindTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range all")); sl@0: test(IntFindTest(100,NUM_TESTS,-1)==KErrNone); sl@0: sl@0: test.Next(_L("FindInOrder tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(IntFindInOrderTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(IntFindInOrderTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range 4095")); sl@0: test(IntFindInOrderTest(100,NUM_TESTS,4095)==KErrNone); sl@0: test.Next(_L("Squares")); sl@0: test(IntFindInOrderTest2()==KErrNone); sl@0: sl@0: test.Next(_L("InsertInOrder tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(IntInsertInOrderTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(IntInsertInOrderTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range all")); sl@0: test(IntInsertInOrderTest(100,NUM_TESTS,-1)==KErrNone); sl@0: test.Next(_L("Squares")); sl@0: test(IntInsertInOrderTest2()==KErrNone); sl@0: sl@0: test.Next(_L("Sort tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(IntSortTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(IntSortTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range all")); sl@0: test(IntSortTest(100,NUM_TESTS,-1)==KErrNone); sl@0: sl@0: test.End(); sl@0: sl@0: test.Start(_L("4 byte RArrays...")); sl@0: sl@0: test.Next(_L("AppendAndAccess tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(SIntAppendAndAccessTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(SIntAppendAndAccessTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range all")); sl@0: test(SIntAppendAndAccessTest(100,NUM_TESTS,-1)==KErrNone); sl@0: sl@0: test.Next(_L("Remove tests...")); sl@0: test(SIntRemoveTest()==KErrNone); sl@0: sl@0: test.Next(_L("Find tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(SIntFindTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(SIntFindTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range all")); sl@0: test(SIntFindTest(100,NUM_TESTS,-1)==KErrNone); sl@0: sl@0: test.Next(_L("FindInOrder tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(SIntFindInOrderTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(SIntFindInOrderTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range 4095")); sl@0: test(SIntFindInOrderTest(100,NUM_TESTS,4095)==KErrNone); sl@0: test.Next(_L("Squares")); sl@0: test(SIntFindInOrderTest2()==KErrNone); sl@0: sl@0: test.Next(_L("InsertInOrder tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(SIntInsertInOrderTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(SIntInsertInOrderTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range all")); sl@0: test(SIntInsertInOrderTest(100,NUM_TESTS,-1)==KErrNone); sl@0: test.Next(_L("Squares")); sl@0: test(SIntInsertInOrderTest2()==KErrNone); sl@0: sl@0: test.Next(_L("Sort tests...")); sl@0: test.Next(_L("Count 10 Range 15")); sl@0: test(SIntSortTest(10,NUM_TESTS,15)==KErrNone); sl@0: test.Next(_L("Count 20 Range 255")); sl@0: test(SIntSortTest(20,NUM_TESTS,255)==KErrNone); sl@0: test.Next(_L("Count 100 Range all")); sl@0: test(SIntSortTest(100,NUM_TESTS,-1)==KErrNone); sl@0: sl@0: test.Next(_L("IntSpecificFindTests...")); sl@0: test(IntSpecificFindTests1()==KErrNone); sl@0: test(IntSpecificFindTests2(100, 10, 15)==KErrNone); sl@0: test(IntSpecificFindTests2(100, 10, 127)==KErrNone); sl@0: sl@0: test.Next(_L("SIntSpecificFindTests...")); sl@0: test(SIntSpecificFindTests2(100, 10, 15)==KErrNone); sl@0: test(SIntSpecificFindTests2(100, 10, 127)==KErrNone); sl@0: test.End(); sl@0: }