--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/textformatting/test/src/TUnique.cpp Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,790 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+* TUnique.cpp test file for UniqueInstance classes
+*
+*/
+
+
+#include "UniqueInstanceImpl.h"
+#include <e32test.h>
+
+using namespace UniqueInstance;
+
+#define UNUSED_VAR(a) a = a
+
+// we will manipulate TInts for simplicity
+// some functions that will help us
+namespace
+{
+TInt CompareVoids(void* pl, void* pr)
+ {
+ TInt l = *reinterpret_cast<TInt*>(pl);
+ TInt r = *reinterpret_cast<TInt*>(pr);
+ return r - l;
+ }
+TInt CompareTInts(const TInt* l, const TInt* r) { return *r - *l; }
+void* CopyVoidL(void* a, TInt)
+ {
+ return new(ELeave) TInt(*reinterpret_cast<TInt*>(a));
+ }
+TInt* CopyTIntL(const TInt* a, TInt) { return new(ELeave) TInt(*a); }
+void DeleteVoid(void* a)
+ {
+ delete reinterpret_cast<TInt*>(a);
+ }
+void DeleteTInt(TInt* a) { delete a; }
+
+CTrapCleanup* TrapCleanup;
+RTest test(_L("TUnique - Unique instance repository tests"));
+}
+
+/////////////////
+// //
+// RSkipList //
+// //
+/////////////////
+
+namespace
+{
+TInt TestEmpty(RSkipList& a)
+ {
+ if (!a.IsEmpty())
+ {
+ test.Printf(_L("RSkipList : unexpectedly has elements"));
+ return 1;
+ }
+ return 0;
+ }
+TInt TestAddL(RSkipList& a, void* aElt, TInt aExpectedRefCount)
+ {
+ SElement* e = a.AddExisting(aElt);
+ if (!e)
+ e = a.AddNewL(aElt);
+ if (CompareVoids(e->iObject,aElt))
+ {
+ test.Printf(_L("RSkipList : added element does not compare equal to returned value"));
+ return 1;
+ }
+ if (e->iRefCount != aExpectedRefCount)
+ {
+ test.Printf(_L("RSkipList : unexpected reference count"));
+ return 1;
+ }
+ return 0;
+ }
+TInt TestRemove(RSkipList& a, void* aElt)
+ {
+ if (CompareVoids(a.Remove(aElt), aElt))
+ {
+ test.Printf(_L("RSkipList : removed element does not compare equal to returned value"));
+ return 1;
+ }
+ return 0;
+ }
+void Test(RSkipList& a)
+ {
+ a.Test();
+ }
+void TestRSkipListL()
+ {
+ __UHEAP_MARK;
+
+ RSkipList s;
+ s.Open(CompareVoids, 16);
+ Test(s);
+
+ TInt* n500 = new(ELeave) TInt(-500);
+ TInt* n400 = new(ELeave) TInt(-400);
+ TInt* n300 = new(ELeave) TInt(-300);
+ TInt* n200 = new(ELeave) TInt(-200);
+ TInt* n190 = new(ELeave) TInt(-190);
+ TInt* n180 = new(ELeave) TInt(-180);
+ TInt* n170 = new(ELeave) TInt(-170);
+ TInt* n160 = new(ELeave) TInt(-160);
+ TInt* n150 = new(ELeave) TInt(-150);
+ TInt* n140 = new(ELeave) TInt(-140);
+ TInt* n130 = new(ELeave) TInt(-130);
+ TInt* n120 = new(ELeave) TInt(-120);
+ TInt* n110 = new(ELeave) TInt(-110);
+ TInt* n100 = new(ELeave) TInt(-100);
+ TInt* n87 = new(ELeave) TInt(-87);
+ TInt* n45 = new(ELeave) TInt(-45);
+ TInt* n3 = new(ELeave) TInt(-3);
+ TInt* p999 = new(ELeave) TInt(999);
+ TInt* p998 = new(ELeave) TInt(998);
+ TInt* p980 = new(ELeave) TInt(980);
+ TInt* p900 = new(ELeave) TInt(900);
+ TInt* p800 = new(ELeave) TInt(800);
+ TInt* p700 = new(ELeave) TInt(700);
+ TInt* p600 = new(ELeave) TInt(600);
+ TInt* p500 = new(ELeave) TInt(500);
+ TInt* p490 = new(ELeave) TInt(490);
+ TInt* p485 = new(ELeave) TInt(485);
+ TInt* p480 = new(ELeave) TInt(480);
+ TInt* p472 = new(ELeave) TInt(472);
+ TInt* p471 = new(ELeave) TInt(471);
+ TInt* p470 = new(ELeave) TInt(470);
+ TInt* p469 = new(ELeave) TInt(469);
+ TInt* p463 = new(ELeave) TInt(463);
+ TInt* p460 = new(ELeave) TInt(460);
+ TInt* p440 = new(ELeave) TInt(440);
+ TInt* p400 = new(ELeave) TInt(400);
+ TInt* p350 = new(ELeave) TInt(350);
+ TInt* p300 = new(ELeave) TInt(300);
+ TInt* p200 = new(ELeave) TInt(200);
+ TInt* p101 = new(ELeave) TInt(101);
+ TInt* p100 = new(ELeave) TInt(100);
+ TInt* p99 = new(ELeave) TInt(99);
+ TInt* p45 = new(ELeave) TInt(45);
+ TInt* p2 = new(ELeave) TInt(2);
+
+ // add everything a first time
+ TestAddL(s, p999, 1);
+ Test(s);
+ TestAddL(s, n190, 1);
+ Test(s);
+ TestAddL(s, n180, 1);
+ Test(s);
+ TestAddL(s, n160, 1);
+ Test(s);
+ TestAddL(s, p485, 1);
+ Test(s);
+ TestAddL(s, n140, 1);
+ Test(s);
+ TestAddL(s, n200, 1);
+ Test(s);
+ TestAddL(s, p470, 1);
+ Test(s);
+ TestAddL(s, n500, 1);
+ Test(s);
+ TestAddL(s, p980, 1);
+ Test(s);
+ TestAddL(s, n150, 1);
+ Test(s);
+ TestAddL(s, n170, 1);
+ Test(s);
+ TestAddL(s, p490, 1);
+ Test(s);
+ TestAddL(s, p500, 1);
+ Test(s);
+ TestAddL(s, p600, 1);
+ Test(s);
+ TestAddL(s, p440, 1);
+ Test(s);
+ TestAddL(s, p998, 1);
+ Test(s);
+ TestAddL(s, p700, 1);
+ Test(s);
+ TestAddL(s, p463, 1);
+ Test(s);
+ TestAddL(s, p460, 1);
+ Test(s);
+ TestAddL(s, p400, 1);
+ Test(s);
+ TestAddL(s, p800, 1);
+ Test(s);
+ TestAddL(s, n130, 1);
+ Test(s);
+ TestAddL(s, n120, 1);
+ Test(s);
+ TestAddL(s, p471, 1);
+ Test(s);
+ TestAddL(s, p472, 1);
+ Test(s);
+ TestAddL(s, p480, 1);
+ Test(s);
+ TestAddL(s, n400, 1);
+ Test(s);
+ TestAddL(s, n300, 1);
+ Test(s);
+ TestAddL(s, p300, 1);
+ Test(s);
+ TestAddL(s, n110, 1);
+ Test(s);
+ TestAddL(s, p350, 1);
+ Test(s);
+ TestAddL(s, p101, 1);
+ Test(s);
+ TestAddL(s, p200, 1);
+ Test(s);
+ TestAddL(s, p469, 1);
+ Test(s);
+ TestAddL(s, p99, 1);
+ Test(s);
+ TestAddL(s, p100, 1);
+ Test(s);
+ TestAddL(s, p45, 1);
+ Test(s);
+ TestAddL(s, p900, 1);
+ Test(s);
+ TestAddL(s, n100, 1);
+ Test(s);
+ TestAddL(s, n87, 1);
+ Test(s);
+ TestAddL(s, n45, 1);
+ Test(s);
+ TestAddL(s, n3, 1);
+ Test(s);
+ TestAddL(s, p2, 1);
+ Test(s);
+
+ // remove a few things
+ TestRemove(s, p500);
+ Test(s);
+ TestRemove(s, p900);
+ Test(s);
+ TestRemove(s, n100);
+ Test(s);
+ TestRemove(s, n200);
+ Test(s);
+ TestRemove(s, p800);
+ Test(s);
+ TestRemove(s, p100);
+ Test(s);
+ TestRemove(s, n400);
+ TestRemove(s, p700);
+ TestRemove(s, p200);
+ TestRemove(s, p600);
+ TestRemove(s, n300);
+ TestRemove(s, p300);
+ TestRemove(s, p400);
+ TestRemove(s, n500);
+
+ // add everything a second time
+ TestAddL(s, p440, 2);
+ TestAddL(s, p480, 2);
+ TestAddL(s, n180, 2);
+ TestAddL(s, n3, 2);
+ TestAddL(s, n130, 2);
+ TestAddL(s, p470, 2);
+ TestAddL(s, n400, 1);
+ TestAddL(s, n45, 2);
+ TestAddL(s, n190, 2);
+ TestAddL(s, p300, 1);
+ TestAddL(s, n120, 2);
+ TestAddL(s, n150, 2);
+ TestAddL(s, p463, 2);
+ TestAddL(s, n170, 2);
+ TestAddL(s, p469, 2);
+ TestAddL(s, p471, 2);
+ TestAddL(s, p490, 2);
+ TestAddL(s, p200, 1);
+ TestAddL(s, p99, 2);
+ TestAddL(s, p980, 2);
+ TestAddL(s, p101, 2);
+ TestAddL(s, p600, 1);
+ TestAddL(s, n500, 1);
+ TestAddL(s, n110, 2);
+ TestAddL(s, p460, 2);
+ TestAddL(s, p485, 2);
+ TestAddL(s, n160, 2);
+ TestAddL(s, n140, 2);
+ TestAddL(s, p100, 1);
+ TestAddL(s, p472, 2);
+ TestAddL(s, p350, 2);
+ TestAddL(s, p400, 1);
+ TestAddL(s, p999, 2);
+ TestAddL(s, n200, 1);
+ TestAddL(s, p500, 1);
+ TestAddL(s, p998, 2);
+ TestAddL(s, n87, 2);
+ TestAddL(s, n100, 1);
+ TestAddL(s, p45, 2);
+ TestAddL(s, p800, 1);
+ TestAddL(s, p900, 1);
+ TestAddL(s, p700, 1);
+ TestAddL(s, n300, 1);
+ TestAddL(s, p2, 2);
+
+ Test(s);
+
+ // remove everything
+ TestRemove(s, p500);
+ TestRemove(s, p900);
+ TestRemove(s, p980);
+ TestRemove(s, p471);
+ TestRemove(s, p472);
+ TestRemove(s, p480);
+ TestRemove(s, p45);
+ TestRemove(s, n160);
+ TestRemove(s, n100);
+ TestRemove(s, n87);
+ TestRemove(s, p469);
+ TestRemove(s, p490);
+ TestRemove(s, n170);
+ TestRemove(s, n200);
+ TestRemove(s, p460);
+ TestRemove(s, p800);
+ TestRemove(s, n120);
+ TestRemove(s, p485);
+ TestRemove(s, p100);
+ TestRemove(s, p99);
+ TestRemove(s, p101);
+ TestRemove(s, n110);
+ TestRemove(s, n400);
+ TestRemove(s, p463);
+ TestRemove(s, n45);
+ TestRemove(s, n3);
+ TestRemove(s, n190);
+ TestRemove(s, p700);
+ TestRemove(s, p999);
+ TestRemove(s, p200);
+ TestRemove(s, p2);
+ TestRemove(s, n180);
+ TestRemove(s, n150);
+ TestRemove(s, p600);
+ TestRemove(s, n300);
+ TestRemove(s, p300);
+ TestRemove(s, p350);
+ TestRemove(s, p400);
+ TestRemove(s, p440);
+ TestRemove(s, p470);
+ TestRemove(s, p998);
+ TestRemove(s, n140);
+ TestRemove(s, n130);
+ TestRemove(s, n500);
+
+ Test(s);
+
+ // add everything
+ TestAddL(s, p999, 1);
+ TestAddL(s, n200, 1);
+ TestAddL(s, n3, 1);
+ TestAddL(s, n110, 1);
+ TestAddL(s, p460, 1);
+ TestAddL(s, p980, 1);
+ TestAddL(s, n500, 1);
+ TestAddL(s, p700, 1);
+ TestAddL(s, n300, 1);
+ TestAddL(s, p2, 1);
+ TestAddL(s, p463, 1);
+ TestAddL(s, p472, 1);
+ TestAddL(s, n100, 1);
+ TestAddL(s, p45, 1);
+ TestAddL(s, n45, 1);
+ TestAddL(s, p469, 1);
+ TestAddL(s, n120, 1);
+ TestAddL(s, p470, 1);
+ TestAddL(s, p400, 1);
+ TestAddL(s, n190, 1);
+ TestAddL(s, p998, 1);
+ TestAddL(s, p490, 1);
+ TestAddL(s, n180, 1);
+ TestAddL(s, p600, 1);
+ TestAddL(s, n160, 1);
+ TestAddL(s, p480, 1);
+ TestAddL(s, p350, 1);
+ TestAddL(s, p200, 1);
+ TestAddL(s, n130, 1);
+ TestAddL(s, p485, 1);
+ TestAddL(s, p500, 1);
+ TestAddL(s, p471, 1);
+ TestAddL(s, p440, 1);
+ TestAddL(s, p800, 1);
+ TestAddL(s, n87, 1);
+ TestAddL(s, p101, 1);
+ TestAddL(s, n140, 1);
+ TestAddL(s, p100, 1);
+ TestAddL(s, n400, 1);
+ TestAddL(s, n170, 1);
+ TestAddL(s, p99, 1);
+ TestAddL(s, p300, 1);
+ TestAddL(s, n150, 1);
+ TestAddL(s, p900, 1);
+
+ Test(s);
+
+ // remove everything
+ TestRemove(s, n120);
+ TestRemove(s, p485);
+ TestRemove(s, p100);
+ TestRemove(s, n500);
+ TestRemove(s, n400);
+ TestRemove(s, p463);
+ TestRemove(s, n150);
+ TestRemove(s, p440);
+ TestRemove(s, n170);
+ TestRemove(s, n3);
+ TestRemove(s, p500);
+ TestRemove(s, p900);
+ TestRemove(s, p980);
+ TestRemove(s, p471);
+ TestRemove(s, p600);
+ TestRemove(s, n300);
+ TestRemove(s, p300);
+ TestRemove(s, p350);
+ TestRemove(s, p700);
+ TestRemove(s, n45);
+ TestRemove(s, n200);
+ TestRemove(s, p2);
+ TestRemove(s, p400);
+ TestRemove(s, n110);
+ TestRemove(s, n190);
+ TestRemove(s, p999);
+ TestRemove(s, p200);
+ TestRemove(s, p99);
+ TestRemove(s, p470);
+ TestRemove(s, p800);
+ TestRemove(s, n180);
+ TestRemove(s, p460);
+ TestRemove(s, p998);
+ TestRemove(s, n140);
+ TestRemove(s, p472);
+ TestRemove(s, p101);
+ TestRemove(s, p480);
+ TestRemove(s, n130);
+ TestRemove(s, p45);
+ TestRemove(s, n160);
+ TestRemove(s, n100);
+ TestRemove(s, n87);
+ TestRemove(s, p469);
+ TestRemove(s, p490);
+
+ TestEmpty(s);
+
+ delete n500;
+ delete n400;
+ delete n300;
+ delete n200;
+ delete n190;
+ delete n180;
+ delete n170;
+ delete n160;
+ delete n150;
+ delete n140;
+ delete n130;
+ delete n120;
+ delete n110;
+ delete n100;
+ delete n87;
+ delete n45;
+ delete n3;
+ delete p2;
+ delete p45;
+ delete p99;
+ delete p100;
+ delete p101;
+ delete p200;
+ delete p300;
+ delete p350;
+ delete p400;
+ delete p440;
+ delete p460;
+ delete p463;
+ delete p469;
+ delete p470;
+ delete p471;
+ delete p472;
+ delete p480;
+ delete p485;
+ delete p490;
+ delete p500;
+ delete p600;
+ delete p700;
+ delete p800;
+ delete p900;
+ delete p980;
+ delete p998;
+ delete p999;
+
+ s.Close();
+
+ __UHEAP_MARKENDC(0);
+ }
+}
+
+///////////////////////
+// //
+// CRepositoryImpl //
+// //
+///////////////////////
+namespace
+{
+TInt TestObject(SElement* e, TInt val)
+ {
+ if (!e->iObject)
+ {
+ test.Printf(_L("CRepositoryImpl : object undefined"));
+ return 1;
+ }
+ if (*reinterpret_cast<TInt*>(e->iObject) != val)
+ {
+ test.Printf(_L("CRepositoryImpl : object has wrong value"));
+ return 1;
+ }
+ return 0;
+ }
+void TestCRepositoryImplL()
+ {
+ __UHEAP_MARK;
+
+ CRepositoryImpl* rep = new(ELeave) CRepositoryImpl(CompareVoids, DeleteVoid,
+ CopyVoidL, sizeof(TInt));
+ rep->ConstructL(1);
+ TInt* n47 = new(ELeave) TInt(-47);
+ TInt* z = new(ELeave) TInt(0);
+ TInt* z2 = new(ELeave) TInt(0);
+ TInt* p8765 = new(ELeave) TInt(8765);
+
+ SElement* z0ui = rep->IncOrCopyL(z);
+
+ SElement* zui = rep->InsertOrIncL(z);
+ SElement* n47ui = rep->InsertOrIncL(n47);
+ SElement* p8765ui = rep->InsertOrIncL(p8765);
+ SElement* z2ui = rep->InsertOrIncL(z2);
+
+ z = new(ELeave) TInt(0);
+ SElement* z3ui = rep->IncOrCopyL(z);
+ delete z;
+
+ // test equal objects are nullified
+ test(zui->iObject == z2ui->iObject);
+ test(zui->iObject == z0ui->iObject);
+ test(zui->iObject == z3ui->iObject);
+
+ rep->DeleteOrDec(z0ui);
+ rep->DeleteOrDec(z3ui);
+
+ TestObject(zui, 0);
+ TestObject(n47ui, -47);
+ TestObject(p8765ui, 8765);
+
+ rep->DeleteOrDec(n47ui);
+
+ TestObject(zui, 0);
+ TestObject(p8765ui, 8765);
+
+ z = reinterpret_cast<TInt*>(rep->DetatchOrCopyL(zui));
+ z2 = reinterpret_cast<TInt*>(rep->DetatchOrCopyL(z2ui));
+ rep->DeleteOrDec(p8765ui);
+
+ // test that copyable objects are not aliased
+ test(z != z2);
+ // test that a valid copy is returned
+ test(*z == 0);
+ test(*z2 == 0);
+
+ delete z;
+ delete z2;
+
+ delete rep;
+
+ __UHEAP_MARKENDC(0);
+ }
+}
+
+///////////////////////////////////
+// //
+// CUniqueInstanceRepository<> //
+// and //
+// RUniqueInstance<> //
+// //
+///////////////////////////////////
+namespace
+{
+TInt TestNull(const RUniqueInstance<TInt>& a)
+ {
+ if (a.Peek())
+ {
+ test.Printf(_L("RUniqueInstance : null object has value"));
+ return 1;
+ }
+ return 0;
+ }
+TInt TestValue(const RUniqueInstance<TInt>& a, TInt val)
+ {
+ if (!a.Peek())
+ {
+ test.Printf(_L("RUniqueInstance : unexpected null object"));
+ return 1;
+ }
+ if (*a.Peek() != val)
+ {
+ test.Printf(_L("RUniqueInstance : object has wrong value"));
+ return 1;
+ }
+ return 0;
+ }
+TInt TestRaw(TInt* ob, TInt val)
+ {
+ if (!ob)
+ {
+ test.Printf(_L("RUniqueInstance : object unexpectedly does not own"));
+ return 1;
+ }
+ if (*ob != val)
+ {
+ test.Printf(_L("RUniqueInstance : object owns incorrect value"));
+ return 1;
+ }
+ return 0;
+ }
+void TestRUniqueInstanceL()
+ {
+ __UHEAP_MARK;
+
+ CUniqueInstanceRepository<TInt>* intRep =
+ CUniqueInstanceRepository<TInt>::NewL(CompareTInts, DeleteTInt, CopyTIntL, 2);
+
+ RUniqueInstance<TInt> a(*intRep);
+ RUniqueInstance<TInt> b(*intRep);
+ RUniqueInstance<TInt> c(*intRep);
+
+ a.TakeL(new(ELeave) TInt(45));
+ b.TakeL(new(ELeave) TInt(-6));
+ c.TakeL(new(ELeave) TInt(45));
+
+ // test that equal elements are unified
+ test(a.Peek() == c.Peek());
+
+ TestValue(a, 45);
+ TestValue(b, -6);
+ TestValue(c, 45);
+
+ a.CopyTo(c);
+
+ TestValue(a, 45);
+ TestValue(b, -6);
+ TestValue(c, 45);
+
+ b.CopyTo(b);
+ b.MoveTo(b);
+
+ TestValue(a, 45);
+ TestValue(b, -6);
+ TestValue(c, 45);
+
+ b.MoveTo(c);
+
+ TestValue(a, 45);
+ TestNull(b);
+ TestValue(c, -6);
+
+ b.MoveTo(c);
+
+ TestValue(a, 45);
+ TestNull(b);
+ TestNull(c);
+
+ c.TakeL(new(ELeave) TInt(87));
+ c.CopyTo(b);
+ TInt* r = c.DropL();
+
+ TestRaw(r, 87);
+
+ delete r;
+ r = b.DropL();
+
+ TestRaw(r, 87);
+
+ delete r;
+
+ a.Close();
+
+ CUniqueInstanceRepository<TInt>* intRep2 =
+ CUniqueInstanceRepository<TInt>::NewL(CompareTInts, DeleteTInt, CopyTIntL, 4);
+
+ RUniqueInstance<TInt> d(*intRep2);
+ RUniqueInstance<TInt> e(*intRep2);
+ RUniqueInstance<TInt> f(*intRep2);
+
+ a.TakeL(new(ELeave) TInt(123));
+ b.TakeL(new(ELeave) TInt(-445));
+ c.TakeL(new(ELeave) TInt(123));
+ d.TakeL(new(ELeave) TInt(-7));
+ e.TakeL(new(ELeave) TInt(18));
+ {
+ TInt n0 = -999;
+ TInt n1 = 1;
+ TInt n2 = 999;
+ f.TakeCopyL(&n0);
+ TestValue(f, -999);
+ f.TakeCopyL(&n1);
+ TestValue(f, 1);
+ f.TakeCopyL(&n2);
+ TestValue(f, 999);
+ f.Close();
+ }
+
+ a.MoveTo(d);
+ TestNull(a);
+ TestValue(d, 123);
+ c.CopyTo(d);
+ TestValue(d, 123);
+ e.MoveTo(a);
+ e.TakeL(new(ELeave) TInt(18));
+
+ // test that equal objects are unified
+ test(a.Peek() == e.Peek());
+
+ d.TakeL(new(ELeave) TInt(-445));
+
+ // test that equal objects are unified
+ test(b.Peek() == d.Peek());
+
+ a.TakeL(new(ELeave) TInt(-445));
+
+ // test that objects from different repositories are not unified
+ test(a.Peek() != b.Peek());
+
+ a.Close();
+
+ // test that destroyed object peeks null
+ test(a.Peek() == 0);
+
+ b.MoveTo(c);
+ b.Close();
+ c.Close();
+ d.Close();
+ e.Close();
+
+ delete intRep2;
+ delete intRep;
+
+ __UHEAP_MARKENDC(0);
+ }
+}
+
+
+////////////
+// //
+// Main //
+// //
+////////////
+
+void RunTests()
+ {
+ __UHEAP_MARK;
+ test.Title();
+ test.Start(_L(" @SYMTestCaseID:SYSLIB-FORM-LEGACY-UNIQUE-0001 Unique Instance Tests: "));
+
+ TestRSkipListL();
+ TestCRepositoryImplL();
+ TestRUniqueInstanceL();
+
+ test.End();
+ test.Close();
+
+ __UHEAP_MARKENDC(0);
+ }
+
+TInt E32Main()
+ {
+ TrapCleanup = CTrapCleanup::New();
+ TRAPD(err, RunTests());
+ test(err == KErrNone);
+ delete TrapCleanup;
+ return 0;
+ }