symport/e32test/buffer/t_lex.cpp
changeset 1 0a7b44b10206
child 2 806186ab5e14
equal deleted inserted replaced
0:c55016431358 1:0a7b44b10206
       
     1 // Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of the License "Symbian Foundation License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // e32test\buffer\t_lex.cpp
       
    15 // Overview:
       
    16 // Test TLex and TLexMark classes.
       
    17 // API Information:
       
    18 // TLex, TLexMark.
       
    19 // Details:
       
    20 // - For Unicode, non Unicode and build independent variant of TLex class
       
    21 // - Test that string-parsing methods are present.
       
    22 // - Test the constructors with no parameter, by a string, with an empty TLex class, 
       
    23 // non-empty TLex class is as expected.
       
    24 // - Test assignment operator of TLex, by initializing with TLex reference, string, 
       
    25 // TBuf reference and check it is as expected.
       
    26 // - Check that Eos, Inc, Mark, Get, Peek, UnGet, SkipSpace, SkipSpaceAndMark, 
       
    27 // SkipCharacters, TokenLength, MarkedToken methods are as expected.
       
    28 // - Initialize Lex string, assign different values, Parse to extract signed, 
       
    29 // unsigned integer of different lengths, using specified radix and verify 
       
    30 // that the return value is KErrNone when a valid string is parsed, KErrGeneral 
       
    31 // when invalid string is parsed, KErrOverflow when converted value is greater 
       
    32 // than the limit. 
       
    33 // - Refresh the contents with the system's locale settings, separate whole number from 
       
    34 // it's fractional part, change locale settings then parse a 64-bit floating point 
       
    35 // number and check that results are as expected.
       
    36 // Platforms/Drives/Compatibility:
       
    37 // All 
       
    38 // Assumptions/Requirement/Pre-requisites:
       
    39 // Failures and causes:
       
    40 // Base Port information:
       
    41 // 
       
    42 //
       
    43 
       
    44 #include <e32test.h>
       
    45 
       
    46 LOCAL_D RTest test(_L("T_LEX")); 
       
    47 
       
    48 struct TLexMark8Dump
       
    49 	{
       
    50 	const TUint8* iPtr;
       
    51 	};
       
    52 
       
    53 struct TLexMark16Dump
       
    54 	{
       
    55 	const TUint16* iPtr;
       
    56 	};
       
    57 
       
    58 void TLexMark8::__DbgTest(void *pTLexMark8Dump) const 
       
    59 	{
       
    60 	((TLexMark8Dump*)pTLexMark8Dump)->iPtr=iPtr;
       
    61 	}
       
    62 
       
    63 void TLexMark16::__DbgTest(void *pTLexMark16Dump) const 
       
    64 	{
       
    65 	((TLexMark16Dump*)pTLexMark16Dump)->iPtr=iPtr;
       
    66 	}
       
    67 
       
    68 struct TLex8Dump
       
    69 	{
       
    70 	const TUint8* iNext;
       
    71 	const TUint8* iBuf;
       
    72 	const TUint8* iEnd;
       
    73 	TLexMark8Dump iMark;
       
    74 	};
       
    75 
       
    76 struct TLex16Dump
       
    77 	{
       
    78 	const TUint16* iNext;
       
    79 	const TUint16* iBuf;
       
    80 	const TUint16* iEnd;
       
    81 	TLexMark16Dump iMark;
       
    82 	};
       
    83 
       
    84 
       
    85 void TLex8::__DbgTest(void* pTLex8Dump) const
       
    86 	{
       
    87 	((TLex8Dump*)pTLex8Dump)->iNext=iNext;
       
    88 	((TLex8Dump*)pTLex8Dump)->iBuf=iBuf;
       
    89 	((TLex8Dump*)pTLex8Dump)->iEnd=iEnd;
       
    90 	iMark.__DbgTest(&((TLex8Dump*)pTLex8Dump)->iMark);
       
    91 	}
       
    92 
       
    93 void TLex16::__DbgTest(void* pTLex16Dump) const
       
    94 	{
       
    95 	((TLex16Dump*)pTLex16Dump)->iNext=iNext;
       
    96 	((TLex16Dump*)pTLex16Dump)->iBuf=iBuf;
       
    97 	((TLex16Dump*)pTLex16Dump)->iEnd=iEnd;
       
    98 	iMark.__DbgTest(&((TLex16Dump*)pTLex16Dump)->iMark);
       
    99 	}
       
   100 
       
   101 
       
   102 LOCAL_C	void TestDes(const TUint16* start1, const TUint16* start2, const TUint16* end1, const TUint16* end2)
       
   103 	{
       
   104 	TPtrC16 des1(start1, end1-start1);
       
   105 	TPtrC16 des2(start2, end2-start2);
       
   106 	test(des1==des2);
       
   107 	}
       
   108 LOCAL_C	void TestDes(const TUint8* start1, const TUint8* start2, const TUint8* end1, const TUint8* end2)
       
   109 	{
       
   110 	TPtrC8 des1(start1, end1-start1);
       
   111 	TPtrC8 des2(start2, end2-start2);
       
   112 	test(des1==des2);
       
   113 	}
       
   114 LOCAL_C void TestDes(const TUint16* start, const TUint16* end, const TUint16* string)
       
   115 	{
       
   116 	TPtrC16 des1(start, end-start);
       
   117 	TPtrC16 des2(string);
       
   118 	test(des1==des2);
       
   119 	}
       
   120 LOCAL_C void TestDes(const TUint8* start, const TUint8* end, const TUint8* string)
       
   121 	{
       
   122 	TPtrC8 des1(start, end-start);
       
   123 	TPtrC8 des2(string);
       
   124 	test(des1==des2);
       
   125 	}
       
   126 
       
   127 
       
   128 void _LL(TText8 array[], TText8 string[])
       
   129 	{
       
   130 
       
   131 	TInt index=0;
       
   132 	for(;string[index]; index++)
       
   133 		array[index]=string[index];
       
   134 	array[index]='\0';
       
   135 	}		
       
   136 
       
   137 void _LL(TText16 array[], TText8 string[])
       
   138 	{
       
   139 
       
   140 	TInt index=0;
       
   141 	for(;string[index]; index++)
       
   142 		array[index]=string[index];
       
   143 	array[index]='\0';
       
   144 	}
       
   145   
       
   146 template<class TDesType, class TLexType, class TLexMarkType, class TBufType, class DumpType, class MarkDumpType, class S>
       
   147 class TestTLex
       
   148 	{
       
   149 public:
       
   150 	void Test1();
       
   151 	void Test2();
       
   152 	void Test3();
       
   153 	void Test4();
       
   154 	void Test5();
       
   155 protected:
       
   156 	void TestList(TLexType* object, TUint param, ...);
       
   157 	};
       
   158 
       
   159 
       
   160 //*********************************
       
   161 // Test that methods are in the DLL
       
   162 //*********************************
       
   163 template<class TDesType, class TLexType, class TLexMarkType, class TBufType, class DumpType, class MarkDumpType, class S>
       
   164 GLDEF_C void TestTLex<TDesType, TLexType, TLexMarkType, TBufType, DumpType, MarkDumpType, S>::Test1()
       
   165 	{
       
   166 	test.Start(_L("Constructors"));
       
   167 	S String[100];
       
   168 	_LL(&String[0], (TText8*)"hello");
       
   169 	TBufType aTBufObject;
       
   170 	TLexType a;								
       
   171 	TLexType b(a);						   
       
   172 	TLexType c(&String[0]);					
       
   173 	TLexType d(aTBufObject);
       
   174     d.Offset(); // Avoids 'unused' warning
       
   175 	TLexMarkType mark;
       
   176 
       
   177 	test.Next(_L("Assignment operations"));
       
   178 	a=b;							
       
   179 	a=&String[0];					
       
   180 	a=aTBufObject;					
       
   181 
       
   182 	test.Next(_L("Assorted"));
       
   183 	c.Eos();
       
   184 	c.Mark(mark);
       
   185 	c.Mark();
       
   186 	c.Inc();
       
   187 	c.Get();
       
   188 	(S)c.Peek();
       
   189 	c.UnGet();
       
   190 	c.UnGetToMark(mark);
       
   191 	c.UnGetToMark();
       
   192 	c.SkipSpace();
       
   193 	c.SkipSpaceAndMark(mark);
       
   194 	c.SkipSpaceAndMark();
       
   195 	c.SkipCharacters();
       
   196 	c.TokenLength(mark);
       
   197 	c.TokenLength();
       
   198 	aTBufObject=c.MarkedToken(mark);
       
   199 	aTBufObject=c.MarkedToken();
       
   200 	aTBufObject=c.NextToken();
       
   201 	aTBufObject=c.Remainder();
       
   202 	aTBufObject=c.RemainderFromMark(mark);
       
   203 	aTBufObject=c.RemainderFromMark();
       
   204 	c.Offset();
       
   205 	c.MarkedOffset(mark);
       
   206 	c.MarkedOffset();
       
   207 
       
   208 	test.Next(_L("Val"));  
       
   209 	TInt TI=1;
       
   210 	c.Val(TI);
       
   211 	TInt8 TI8='a';
       
   212 	c.Val(TI8);
       
   213 	TInt16 TI16=1;
       
   214 	c.Val(TI16);
       
   215 	TInt32 TI32=1;
       
   216 	c.Val(TI32);
       
   217 	TInt64 TI64=1;
       
   218 	c.Val(TI64);
       
   219 	TUint TU=1;
       
   220 	c.Val(TU);
       
   221 	TReal32 TR32=1.0F;
       
   222 	c.Val(TR32);
       
   223 	TReal64 TR64=1.0;
       
   224 	c.Val(TR64);
       
   225 	TUint8 TU8='a';
       
   226 	TUint32 TU32=1;
       
   227 	TRadix TR=(TRadix)EDecimal;
       
   228 	TUint16 TU16=1;
       
   229 
       
   230 	c.Val(TU8, TR);
       
   231 	c.Val(TU16, TR);  	
       
   232 	c.BoundedVal(TI32, TU);
       
   233 	c.BoundedVal(TU32, TR, TU);
       
   234 	c.BoundedVal(TI64, TR, TU);
       
   235 
       
   236 	test.Next(_L("Assign"));
       
   237 	c.Assign(b);
       
   238 	c.Assign(&String[0]);
       
   239 	c.Assign(aTBufObject);	
       
   240 
       
   241 	test.Next(_L("Test Dumps"));
       
   242 	MarkDumpType mDump;
       
   243 	mark.__DbgTest(&mDump);
       
   244 
       
   245 	DumpType dump;
       
   246 	c.__DbgTest(&dump);
       
   247 	test.End();
       
   248 	} 
       
   249 		
       
   250 
       
   251 ///////////////////////////////////////
       
   252 // Test calling Convert() with  a list
       
   253 ///////////////////////////////////////
       
   254 template<class TDesType, class TLexType, class TLexMarkType, class TBufType, class DumpType, class MarkDumpType, class S>
       
   255 GLDEF_C void TestTLex<TDesType, TLexType, TLexMarkType, TBufType, DumpType, MarkDumpType, S>::TestList(TLexType *object, TUint param, ...)
       
   256 	{
       
   257 	VA_LIST l;
       
   258 	TBufType b;
       
   259 
       
   260 	VA_START(l, param);
       
   261 	object->Convert(b, l);
       
   262 	}
       
   263 
       
   264 
       
   265 /////////////////////////
       
   266 // Test the constructors
       
   267 ////////////////////////
       
   268 template<class TDesType, class TLexType, class TLexMarkType, class TBufType, class DumpType, class MarkDumpType, class S>
       
   269 GLDEF_C void TestTLex<TDesType, TLexType, TLexMarkType, TBufType, DumpType, MarkDumpType, S>::Test2()
       
   270 	{
       
   271 	// Test constructors  NOTE: there's no getters for iMark or iBuf
       
   272 	DumpType dump, dump2;
       
   273 	S String[40];
       
   274 
       
   275 	test.Start(_L("Constructors:"));	// TLexx::TLexx()
       
   276 	test.Next(_L("By default"));
       
   277 	TLexType a; 
       
   278 	a.__DbgTest(&dump);
       
   279 	test(dump.iBuf==NULL);
       
   280  	
       
   281 	test.Next(_L("By string"));		 	// TLexx::TLexx(const TUintx*)
       
   282 	_LL(&String[0], (TText8*)"AB");
       
   283 	TLexType b(&String[0]);
       
   284 	b.__DbgTest(&dump);
       
   285 	TestDes(dump.iNext, dump.iEnd, &String[0]);
       
   286 	TestDes(dump.iBuf, dump.iEnd, &String[0]);
       
   287 	TestDes(dump.iMark.iPtr, dump.iEnd, &String[0]);
       
   288 
       
   289 	test.Next(_L("By TLex reference"));	// TLexx::TLexx(const TLexx&)
       
   290 	// Test with an empty class
       
   291 	TLexType c, d(c);
       
   292 	c.__DbgTest(&dump);
       
   293 	d.__DbgTest(&dump2);
       
   294 	TestDes(dump.iNext, dump2.iNext, dump.iEnd, dump2.iEnd);
       
   295 	test(dump.iBuf==NULL);
       
   296 	test(dump.iBuf==dump2.iBuf); 
       
   297 	TestDes(dump.iMark.iPtr, dump2.iMark.iPtr, dump.iEnd, dump2.iEnd);
       
   298 
       
   299 	//Test with a non empty class
       
   300 	_LL(&String[0], (TText8*)"XYZ");
       
   301 	TLexType e(&String[0]), f(e);
       
   302 	e.__DbgTest(&dump);
       
   303 	f.__DbgTest(&dump2);
       
   304 	TestDes(dump.iNext, dump.iEnd, &String[0]);
       
   305 	TestDes(dump.iNext, dump2.iNext, dump.iEnd, dump2.iEnd);
       
   306 	TestDes(dump.iBuf, dump2.iBuf, dump.iEnd, dump2.iEnd);
       
   307 	TestDes(dump.iMark.iPtr, dump2.iMark.iPtr, dump.iEnd, dump2.iEnd);
       
   308 	
       
   309 	test.Next(_L("By TBuf reference"));	//TLexx::TLexx(const TBufBasex&)
       
   310 	_LL(&String[0], (TText8*)"Hello");
       
   311 	TBufType aBuf(&String[0]);
       
   312 	TLexType g(aBuf);
       
   313 	g.__DbgTest(&dump);
       
   314 	TestDes(dump.iNext, dump.iEnd, &String[0]);
       
   315 	TestDes(dump.iBuf, dump.iEnd, &String[0]);
       
   316 	TestDes(dump.iMark.iPtr, dump.iEnd, &String[0]);
       
   317 
       
   318 	test.End();
       
   319 	}
       
   320 
       
   321 
       
   322 //*********************************
       
   323 // Test the = methods
       
   324 //*********************************
       
   325 template<class TDesType, class TLexType, class TLexMarkType, class TBufType, class DumpType, class MarkDumpType, class S>
       
   326 GLDEF_C void TestTLex<TDesType, TLexType, TLexMarkType, TBufType, DumpType, MarkDumpType, S>::Test3()
       
   327 	{
       
   328 	DumpType dump, dump2;
       
   329 	S String[40];
       
   330 
       
   331 	test.Start(_L("= operators"));
       
   332 	test.Next(_L("by TLex reference"));	//TLexx::operator=(const TLexx&)
       
   333 	_LL(&String[0], (TText8*)"MNO");
       
   334 	TLexType a(&String[0]), b;
       
   335 	b=a;	
       
   336 	a.__DbgTest(&dump);
       
   337 	b.__DbgTest(&dump2);  
       
   338 	TestDes(dump.iNext, dump2.iNext, dump.iEnd, dump2.iEnd); 
       
   339 	TestDes(dump.iMark.iPtr, dump2.iMark.iPtr, dump.iEnd, dump2.iEnd);
       
   340 	TestDes(dump.iBuf, dump2.iBuf, dump.iEnd, dump2.iEnd);
       
   341 
       
   342 	test.Next(_L("by string"));			//TLexx::operator=(const TUintx*)
       
   343 	TLexType c;
       
   344 	_LL(&String[0], (TText8*)" abc");
       
   345 	c=&String[0];
       
   346 	c.__DbgTest(&dump);
       
   347 	TestDes(dump.iNext, dump.iEnd, &String[0]);	
       
   348 	TestDes(dump.iBuf, dump.iEnd, &String[0]);
       
   349 	TestDes(dump.iMark.iPtr, dump.iEnd, &String[0]);
       
   350 
       
   351 	test.Next(_L("by TBuf reference"));	//TLexx::operator=(const TBufx&);
       
   352 	_LL(&String[0], (TText8*)"PQ R ");
       
   353 	TLexType d;
       
   354 	TBufType e(&String[0]);
       
   355 	d=e;
       
   356 	d.__DbgTest(&dump);
       
   357 	TestDes(dump.iNext, dump.iEnd, &String[0]);	
       
   358 	TestDes(dump.iBuf, dump.iEnd, &String[0]);
       
   359 	TestDes(dump.iMark.iPtr, dump.iEnd, &String[0]);	
       
   360 	test.End();	 		 
       
   361 	}
       
   362 
       
   363 
       
   364 //*********************************
       
   365 // Test supporting methods
       
   366 //*********************************
       
   367 template<class TDesType, class TLexType, class TLexMarkType, class TBufType, class DumpType, class MarkDumpType, class S>
       
   368 GLDEF_C void TestTLex<TDesType, TLexType, TLexMarkType, TBufType, DumpType, MarkDumpType, S>::Test4()
       
   369 	{
       
   370 	S String[40];
       
   371 	DumpType dump1,dump2;
       
   372 	MarkDumpType mDump;
       
   373 
       
   374 	test.Start(_L("Supporting methods"));
       
   375 	test.Next(_L("Eos()"));
       
   376 	_LL(&String[0], (TText8*)"GGG");
       
   377 	TLexType a, b(&String[0]);
       
   378 	test(a.Eos()==TRUE);
       
   379 	test(b.Eos()==FALSE);
       
   380 
       
   381 	test.Next(_L("Inc()"));	   // Inc() increments iNext
       
   382 	_LL(&String[0], (TText8*)"mno");
       
   383 	TLexType c(&String[0]);
       
   384 	c.__DbgTest(&dump1);
       
   385 
       
   386 	TestDes(dump1.iNext, dump1.iEnd, &String[0]);
       
   387 	c.Inc();
       
   388 	test((S)c.Peek()==String[1]);
       
   389 	c.Inc();
       
   390 	test((S)c.Peek()==String[2]);
       
   391 
       
   392 	test.Next(_L("Mark()"));		//	Mark() sets iMark=iNext
       
   393 	_LL(&String[0], (TText8*)"pqr");
       
   394 	TLexType d(&String[0]);
       
   395 	d.Inc();
       
   396 	d.__DbgTest(&dump1);
       
   397 	d.Mark();
       
   398 	d.__DbgTest(&dump2);
       
   399 	TestDes(dump2.iMark.iPtr, dump1.iNext, dump2.iEnd, dump1.iEnd);
       
   400 
       
   401 	test.Next(_L("Mark(mark)")); //	Mark(aMark) sets aMark=iNext
       
   402 	_LL(&String[0], (TText8*)"pqr");
       
   403 	TLexType d1(&String[0]);
       
   404 	TLexMarkType dm;
       
   405 	d1.Inc();
       
   406 	d1.__DbgTest(&dump1);
       
   407 	d1.Mark(dm);
       
   408 	dm.__DbgTest(&mDump);
       
   409 	TestDes(mDump.iPtr, dump1.iNext, dump1.iEnd, dump1.iEnd);
       
   410 
       
   411 
       
   412 	test.Next(_L("Get()")); 	// Get() is {TChar c(*iNext);Inc(); return(c);}
       
   413 	_LL(&String[0], (TText8*)"s");
       
   414 	TLexType e(&String[0]);
       
   415 	TChar temp=e.Get();
       
   416 	test(temp=='s');
       
   417 	e.Inc();
       
   418 	temp=e.Get();
       
   419 	test(temp==0);
       
   420 
       
   421 
       
   422 	test.Next(_L("Peek()"));	// Peek() returns *iNext
       
   423 	TLexType f;
       
   424 	test(f.Peek()==0);
       
   425 	_LL(&String[0], (TText8*)"ab");
       
   426 	TLexType g(&String[0]);
       
   427 	test((S)g.Peek()==String[0]);
       
   428 
       
   429 	test.Next(_L("UnGet()"));	//  UnGet() is effectively if(iNext!=iBuf) iNext--;
       
   430 	_LL(&String[0], (TText8*)"abc");
       
   431 	TLexType h(&String[0]);
       
   432 	h.Inc();
       
   433 	test((S)h.Peek()==String[1]);
       
   434 	h.UnGet();
       
   435 	test((S)h.Peek()==String[0]);
       
   436 
       
   437 	test.Next(_L("SkipSpace()"));	// SkipSpace() 	is while(Peek.IsSpace()) iNext++;
       
   438 	_LL(&String[0], (TText8*)"  j  kl");
       
   439 	TLexType i(&String[0]);
       
   440 	i.SkipSpace();
       
   441 	test((S)i.Peek()==String[2]);
       
   442 	i.Inc();
       
   443 	i.SkipSpace();
       
   444 	test((S)i.Peek()==String[5]);
       
   445 
       
   446 	test.Next(_L("SkipSpaceAndMark()"));	// while(Peek.IsSpace()) iNext++;	iMark=iNext;
       
   447 	_LL(&String[0], (TText8*)"    aaa");
       
   448 	TLexType j(&String[0]);
       
   449 	j.SkipSpaceAndMark();
       
   450 	j.__DbgTest(&dump1);
       
   451 	_LL(&String[0], (TText8*)"aaa");
       
   452 	TestDes(dump1.iNext, dump1.iEnd, &String[0]);
       
   453 	TestDes(dump1.iMark.iPtr, dump1.iEnd, &String[0]);
       
   454 
       
   455 	test.Next(_L("SkipSpaceAndMark(aMark)"));	// while(Peek.IsSpace()) iNext++;	iMark=iNext;
       
   456 	_LL(&String[0], (TText8*)"    aaa");
       
   457 	TLexType j1(&String[0]);
       
   458 	TLexMarkType jm;
       
   459 	j1.SkipSpaceAndMark(jm);
       
   460 	j1.__DbgTest(&dump1);
       
   461 	jm.__DbgTest(&mDump);
       
   462 	_LL(&String[0], (TText8*)"aaa");
       
   463 	TestDes(dump1.iNext, dump1.iEnd, &String[0]);
       
   464 	TestDes(mDump.iPtr, dump1.iEnd, &String[0]);
       
   465 
       
   466 	test.Next(_L("SkipCharacters()"));	// Skips non whitespace characters
       
   467 	_LL(&String[0], (TText8*)"abc   ");
       
   468 	TLexType k(&String[0]);
       
   469 	k.SkipCharacters();
       
   470 	test((S)k.Peek()==String[3]);
       
   471 
       
   472 	test.Next(_L("TokenLength()"));		// returns iNext-iMark
       
   473 	_LL(&String[0], (TText8*)"GGG");
       
   474 	TLexType l(&String[0]);
       
   475 	test(l.TokenLength()==0);
       
   476 	l.Inc();
       
   477 	test(l.TokenLength()==1); 
       
   478 
       
   479 	test.Next(_L("MarkedToken()"));		// Extract a marked token
       
   480 	_LL(&String[0], (TText8*)"ABCD");
       
   481 	TLexType m(&String[0]);
       
   482 	TBufType Buf;
       
   483 	TLexMarkType mm;
       
   484 	m.Inc();
       
   485 	m.Mark();
       
   486 	m.Inc();
       
   487 	m.Mark(mm);
       
   488 	m.Inc();
       
   489 	Buf=m.MarkedToken();
       
   490 	S String2[4];
       
   491 	_LL(&String2[0], (TText8*)"BC");
       
   492 	test(TDesType(&String2[0])==Buf); 
       
   493 	_LL(&String2[0], (TText8*)"C");
       
   494 	Buf=m.MarkedToken(mm);
       
   495 	test(TDesType(&String2[0])==Buf); 
       
   496 
       
   497 	test.End();
       
   498 	}
       
   499 
       
   500 
       
   501 //*********************************
       
   502 // Test Val()
       
   503 //*********************************
       
   504 template<class TDesType, class TLexType, class TLexMarkType, class TBufType, class DumpType, class MarkDumpType, class S>
       
   505 GLDEF_C void TestTLex<TDesType, TLexType, TLexMarkType, TBufType, DumpType, MarkDumpType, S>::Test5()
       
   506 	{
       
   507 	S String[66];
       
   508 	TInt ret; 
       
   509 	TLexType Lex;
       
   510 	test.Start(_L("Val()"));
       
   511 
       
   512 	//////////////////
       
   513 	// Test Val(TInt8)
       
   514 	/////////////////
       
   515 	test.Next(_L("Val(TInt8)"));
       
   516 	TInt8 T8;
       
   517 	_LL(&String[0], (TText8*)"");
       
   518 	Lex=&String[0];
       
   519 	test((ret=Lex.Val(T8))==KErrGeneral);
       
   520 
       
   521 	_LL(&String[0], (TText8*)"abc");
       
   522 	Lex=&String[0];
       
   523 	test((ret=Lex.Val(T8))==KErrGeneral);
       
   524 
       
   525 	_LL(&String[0], (TText8*)"-abc-");
       
   526 	Lex=&String[0];
       
   527 	test((ret=Lex.Val(T8))==KErrGeneral);
       
   528 	
       
   529 	_LL(&String[0], (TText8*)"+abc+");
       
   530 	Lex=&String[0];
       
   531 	test((ret=Lex.Val(T8))==KErrGeneral);
       
   532 
       
   533 	_LL(&String[0], (TText8*)"0000000123abc");
       
   534 	Lex=&String[0];
       
   535 	test((ret=Lex.Val(T8))==KErrNone);
       
   536 	test(T8==123);
       
   537 
       
   538 	_LL(&String[0], (TText8*)"000");
       
   539 	Lex=&String[0];
       
   540 	test((ret=Lex.Val(T8))==KErrNone);
       
   541 	test(T8==0);
       
   542 
       
   543 	_LL(&String[0], (TText8*)"+0");
       
   544 	Lex=&String[0];
       
   545 	test((ret=Lex.Val(T8))==KErrNone);
       
   546 	test(T8==0);
       
   547 
       
   548 	_LL(&String[0], (TText8*)"-0");
       
   549 	Lex=&String[0];
       
   550 	test((ret=Lex.Val(T8))==KErrNone);
       
   551 	test(T8==0);
       
   552 
       
   553 	_LL(&String[0], (TText8*)"+1 ");
       
   554 	Lex=&String[0];
       
   555 	test((ret=Lex.Val(T8))==KErrNone);
       
   556 	test(T8==1);
       
   557 
       
   558 	_LL(&String[0], (TText8*)"-1 ");
       
   559 	Lex=&String[0];
       
   560 	test((ret=Lex.Val(T8))==KErrNone);
       
   561 	test(T8==-1);
       
   562 
       
   563 	_LL(&String[0], (TText8*)"127");
       
   564 	Lex=&String[0];
       
   565 	test((ret=Lex.Val(T8))==KErrNone);
       
   566 	test(T8==127);
       
   567 
       
   568 	_LL(&String[0], (TText8*)"128");
       
   569 	Lex=&String[0];
       
   570 	test((ret=Lex.Val(T8))==KErrOverflow);
       
   571 
       
   572 	_LL(&String[0], (TText8*)"-128");
       
   573 	Lex=&String[0];
       
   574 	test((ret=Lex.Val(T8))==KErrNone);
       
   575 	test(T8==-128);
       
   576 
       
   577 	_LL(&String[0], (TText8*)"-129");
       
   578 	Lex=&String[0];
       
   579 	test((ret=Lex.Val(T8))==KErrOverflow);
       
   580 
       
   581 
       
   582 	///////////////////
       
   583 	// Test Val(TInt16)
       
   584 	///////////////////
       
   585 	test.Next(_L("Val(TInt16)"));
       
   586 	TInt16 T16;
       
   587 	_LL(&String[0], (TText8*)"");
       
   588 	Lex=&String[0];
       
   589 	test((ret=Lex.Val(T16))==KErrGeneral);
       
   590 
       
   591 	_LL(&String[0], (TText8*)"32767");
       
   592 	Lex=&String[0];
       
   593 	test((ret=Lex.Val(T16))==KErrNone);
       
   594 	test(T16==32767);
       
   595 
       
   596 	_LL(&String[0], (TText8*)"32768");
       
   597 	Lex=&String[0];
       
   598 	test((ret=Lex.Val(T16))==KErrOverflow);
       
   599 
       
   600 	_LL(&String[0], (TText8*)"-32768");
       
   601 	Lex=&String[0];
       
   602 	test((ret=Lex.Val(T16))==KErrNone);
       
   603 	test(T16==-32768);
       
   604 
       
   605 	_LL(&String[0], (TText8*)"-32769");
       
   606 	Lex=&String[0];
       
   607 	test((ret=Lex.Val(T16))==KErrOverflow);
       
   608 
       
   609 
       
   610 	///////////////////
       
   611 	// Test Val(TInt32)
       
   612 	///////////////////
       
   613 	test.Next(_L("Val(TInt32)"));
       
   614 	TInt32 T32;
       
   615 	_LL(&String[0], (TText8*)"");
       
   616 	Lex=&String[0];
       
   617 	test((ret=Lex.Val(T32))==KErrGeneral);
       
   618 
       
   619 	_LL(&String[0], (TText8*)"2147483647");
       
   620 	Lex=&String[0];
       
   621 	test((ret=Lex.Val(T32))==KErrNone);
       
   622 	test(T32==2147483647L);
       
   623 
       
   624 	_LL(&String[0], (TText8*)"2147483648");
       
   625 	Lex=&String[0];
       
   626 	test((ret=Lex.Val(T32))==KErrOverflow);
       
   627 
       
   628 	_LL(&String[0], (TText8*)"-2147483648");
       
   629 	Lex=&String[0];
       
   630 	test((ret=Lex.Val(T32))==KErrNone);
       
   631 	test(T32==-2147483647-1);  // the -1 prevents a (bug?) warning
       
   632 
       
   633 	_LL(&String[0], (TText8*)"-2147483649");
       
   634 	Lex=&String[0];
       
   635 	test((ret=Lex.Val(T32))==KErrOverflow);
       
   636 
       
   637 
       
   638 	/////////////////
       
   639 	// Test Val(TInt)
       
   640 	/////////////////
       
   641 	test.Next(_L("Val(TInt)"));
       
   642 	TInt T;
       
   643 	_LL(&String[0], (TText8*)"");
       
   644 	Lex=&String[0];
       
   645 	test((ret=Lex.Val(T))==KErrGeneral);
       
   646 
       
   647 	_LL(&String[0], (TText8*)"2147483647");
       
   648 	Lex=&String[0];
       
   649 	test((ret=Lex.Val(T))==KErrNone);
       
   650 	test(T==2147483647L);
       
   651 
       
   652 	_LL(&String[0], (TText8*)"2147483648");
       
   653 	Lex=&String[0];
       
   654 	test((ret=Lex.Val(T))==KErrOverflow);
       
   655 
       
   656 	_LL(&String[0], (TText8*)"-2147483648");
       
   657 	Lex=&String[0];
       
   658 	test((ret=Lex.Val(T))==KErrNone);
       
   659 	test(T==-2147483647-1);  // the -1 prevents a (bug?) warning
       
   660 
       
   661 	_LL(&String[0], (TText8*)"-2147483649");
       
   662 	Lex=&String[0];
       
   663 	test((ret=Lex.Val(T))==KErrOverflow);
       
   664 
       
   665 	/////////////////
       
   666 	// Test Val(TInt64)
       
   667 	/////////////////
       
   668 	test.Next(_L("Val(TInt64)"));
       
   669 	TInt64 T64;
       
   670 	_LL(&String[0], (TText8*)"");
       
   671 	Lex=&String[0];
       
   672 	test((ret=Lex.Val(T64))==KErrGeneral);
       
   673 
       
   674 	_LL(&String[0], (TText8*)"2147483647");
       
   675 	Lex=&String[0];
       
   676 	test((ret=Lex.Val(T64))==KErrNone);
       
   677 	test(T64==TInt(2147483647L));
       
   678 
       
   679 	_LL(&String[0], (TText8*)"2147483648");
       
   680 	Lex=&String[0];
       
   681 	test((ret=Lex.Val(T64))==KErrNone);
       
   682 	test(T64==MAKE_TINT64(0,0x80000000u));
       
   683 
       
   684 	_LL(&String[0], (TText8*)"-2147483648");
       
   685 	Lex=&String[0];
       
   686 	test((ret=Lex.Val(T64))==KErrNone);
       
   687 	test(T64==-2147483647-1);  // the -1 prevents a (bug?) warning
       
   688 
       
   689 	_LL(&String[0], (TText8*)"-2147483649");
       
   690 	Lex=&String[0];
       
   691 	test((ret=Lex.Val(T64))==KErrNone);
       
   692 	test(T64==MAKE_TINT64(0xffffffffu,0x7fffffffu));
       
   693 
       
   694 	_LL(&String[0], (TText8*)"9223372036854775807");
       
   695 	Lex=&String[0];
       
   696 	ret=Lex.Val(T64);
       
   697 	test.Printf(_L("ret=%d\n"),ret);
       
   698 	test(ret==KErrNone);
       
   699 	test.Printf(_L("%lx\n"),T64);
       
   700 	test(T64==MAKE_TINT64(0x7fffffffu,0xffffffffu));
       
   701 
       
   702 	_LL(&String[0], (TText8*)"9223372036854775808");
       
   703 	Lex=&String[0];
       
   704 	test((ret=Lex.Val(T64))==KErrOverflow);
       
   705 
       
   706 	_LL(&String[0], (TText8*)"-9223372036854775808");
       
   707 	Lex=&String[0];
       
   708 	test((ret=Lex.Val(T64))==KErrNone);
       
   709 	test(T64==MAKE_TINT64(0x80000000u,0x0));
       
   710 
       
   711 	_LL(&String[0], (TText8*)"-9223372036854775809");
       
   712 	Lex=&String[0];
       
   713 	test((ret=Lex.Val(T64))==KErrOverflow);
       
   714 
       
   715 	////////////////////					
       
   716 	// Test Val(TReal32)
       
   717 	/////////////////////
       
   718 //	test.Next(_L("Val(TReal32)"));
       
   719 //	TReal32 TR32;
       
   720 //	test((ret=Lex.Val(TR32))==KErrNotSupported);
       
   721 
       
   722 
       
   723 	////////////////////
       
   724 	// Test Val(TReal64)
       
   725 	///////////////////
       
   726 //	test.Next(_L("Val(TReal64)"));
       
   727 //	TReal64 TR64;
       
   728 //	test((ret=Lex.Val(TR64))==KErrNotSupported);
       
   729 
       
   730 
       
   731 	///////////////////////////
       
   732 	// Test Val(TUint8, TRadix)
       
   733 	///////////////////////////
       
   734 	test.Next(_L("Val(TUint8, TRadix)"));
       
   735 	TUint8 TU8;
       
   736 
       
   737 	_LL(&String[0], (TText8*)"00");
       
   738 	Lex=&String[0];
       
   739 	test((ret=Lex.Val(TU8, (TRadix)EBinary))==KErrNone);
       
   740 	test(TU8==0);
       
   741 
       
   742 	_LL(&String[0], (TText8*)"01");
       
   743 	Lex=&String[0];
       
   744 	test((ret=Lex.Val(TU8, (TRadix)EBinary))==KErrNone);
       
   745 	test(TU8==1);
       
   746 
       
   747 	_LL(&String[0], (TText8*)"11111111");
       
   748 	Lex=&String[0];
       
   749 	test((ret=Lex.Val(TU8, (TRadix)EBinary))==KErrNone);
       
   750 	test(TU8==255);
       
   751 
       
   752 	_LL(&String[0], (TText8*)"100000000");
       
   753 	Lex=&String[0];
       
   754 	test((ret=Lex.Val(TU8, (TRadix)EBinary))==KErrOverflow);
       
   755 
       
   756 	_LL(&String[0], (TText8*)"00");
       
   757 	Lex=&String[0];
       
   758 	test((ret=Lex.Val(TU8, (TRadix)EOctal))==KErrNone);
       
   759 	test(TU8==0);
       
   760 
       
   761 	_LL(&String[0], (TText8*)"01");
       
   762 	Lex=&String[0];
       
   763 	test((ret=Lex.Val(TU8, (TRadix)EOctal))==KErrNone);
       
   764 	test(TU8==1);
       
   765 
       
   766 	_LL(&String[0], (TText8*)"377");
       
   767 	Lex=&String[0];
       
   768 	test((ret=Lex.Val(TU8, (TRadix)EOctal))==KErrNone);
       
   769 	test(TU8==255);
       
   770 
       
   771 	_LL(&String[0], (TText8*)"400");
       
   772 	Lex=&String[0];			
       
   773 	test((ret=Lex.Val(TU8, (TRadix)EOctal))==KErrOverflow);
       
   774 
       
   775 	_LL(&String[0], (TText8*)"00");
       
   776 	Lex=&String[0];
       
   777 	test((ret=Lex.Val(TU8, (TRadix)EDecimal))==KErrNone);
       
   778 	test(TU8==0);
       
   779 
       
   780 	_LL(&String[0], (TText8*)"01");
       
   781 	Lex=&String[0];
       
   782 	test((ret=Lex.Val(TU8, (TRadix)EDecimal))==KErrNone);
       
   783 	test(TU8==1);
       
   784 
       
   785 	_LL(&String[0], (TText8*)"255");
       
   786 	Lex=&String[0];
       
   787 	test((ret=Lex.Val(TU8, (TRadix)EDecimal))==KErrNone);
       
   788 	test(TU8==255);
       
   789 
       
   790 	_LL(&String[0], (TText8*)"256");
       
   791 	Lex=&String[0];			
       
   792 	test((ret=Lex.Val(TU8, (TRadix)EDecimal))==KErrOverflow);
       
   793 
       
   794 	_LL(&String[0], (TText8*)"00");
       
   795 	Lex=&String[0];
       
   796 	test((ret=Lex.Val(TU8, (TRadix)EHex))==KErrNone);
       
   797 	test(TU8==0);
       
   798 
       
   799 	_LL(&String[0], (TText8*)"01");
       
   800 	Lex=&String[0];
       
   801 	test((ret=Lex.Val(TU8, (TRadix)EHex))==KErrNone);
       
   802 	test(TU8==1);
       
   803 
       
   804 	_LL(&String[0], (TText8*)"Ff");
       
   805 	Lex=&String[0];
       
   806 	test((ret=Lex.Val(TU8, (TRadix)EHex))==KErrNone);
       
   807 	test(TU8==255);
       
   808 
       
   809 	_LL(&String[0], (TText8*)"100");
       
   810 	Lex=&String[0];			
       
   811 	test((ret=Lex.Val(TU8, (TRadix)EHex))==KErrOverflow);
       
   812 
       
   813 
       
   814 
       
   815 	////////////////////////////
       
   816 	// Test Val(TUint16, TRadix)
       
   817 	////////////////////////////
       
   818 	test.Next(_L("Val(TUint16, TRadix)"));
       
   819 	TUint16 TU16;
       
   820 
       
   821 	_LL(&String[0], (TText8*)"00");
       
   822 	Lex=&String[0];
       
   823 	test((ret=Lex.Val(TU16, (TRadix)EBinary))==KErrNone);
       
   824 	test(TU16==0);
       
   825 
       
   826 	_LL(&String[0], (TText8*)"01");
       
   827 	Lex=&String[0];
       
   828 	test((ret=Lex.Val(TU16, (TRadix)EBinary))==KErrNone);
       
   829 	test(TU16==1);
       
   830 
       
   831 	_LL(&String[0], (TText8*)"1111111111111111");
       
   832 	Lex=&String[0];
       
   833 	test((ret=Lex.Val(TU16, (TRadix)EBinary))==KErrNone);
       
   834 	test(TU16==65535);
       
   835 
       
   836 	_LL(&String[0], (TText8*)"10000000000000000");
       
   837 	Lex=&String[0];
       
   838 	test((ret=Lex.Val(TU16, (TRadix)EBinary))==KErrOverflow);
       
   839 
       
   840 	_LL(&String[0], (TText8*)"00");
       
   841 	Lex=&String[0];
       
   842 	test((ret=Lex.Val(TU16, (TRadix)EOctal))==KErrNone);
       
   843 	test(TU16==0);
       
   844 
       
   845 	_LL(&String[0], (TText8*)"01");
       
   846 	Lex=&String[0];
       
   847 	test((ret=Lex.Val(TU16, (TRadix)EOctal))==KErrNone);
       
   848 	test(TU16==1);
       
   849 
       
   850 	_LL(&String[0], (TText8*)"177777");
       
   851 	Lex=&String[0];
       
   852 	test((ret=Lex.Val(TU16, (TRadix)EOctal))==KErrNone);
       
   853 	test(TU16==65535);
       
   854 
       
   855 	_LL(&String[0], (TText8*)"200000");
       
   856 	Lex=&String[0];
       
   857 	test((ret=Lex.Val(TU16, (TRadix)EOctal))==KErrOverflow);
       
   858 
       
   859 	_LL(&String[0], (TText8*)"00");
       
   860 	Lex=&String[0];
       
   861 	test((ret=Lex.Val(TU16, (TRadix)EDecimal))==KErrNone);
       
   862 	test(TU16==0);
       
   863 
       
   864 	_LL(&String[0], (TText8*)"01");
       
   865 	Lex=&String[0];
       
   866 	test((ret=Lex.Val(TU16, (TRadix)EDecimal))==KErrNone);
       
   867 	test(TU16==1);
       
   868 
       
   869 	_LL(&String[0], (TText8*)"65535");
       
   870 	Lex=&String[0];
       
   871 	test((ret=Lex.Val(TU16, (TRadix)EDecimal))==KErrNone);
       
   872 	test(TU16==65535);
       
   873 
       
   874 	_LL(&String[0], (TText8*)"65536");
       
   875 	Lex=&String[0];			
       
   876 	test((ret=Lex.Val(TU16, (TRadix)EDecimal))==KErrOverflow);
       
   877 
       
   878 	_LL(&String[0], (TText8*)"00");
       
   879 	Lex=&String[0];
       
   880 	test((ret=Lex.Val(TU16, (TRadix)EHex))==KErrNone);
       
   881 	test(TU16==0);
       
   882 
       
   883 	_LL(&String[0], (TText8*)"01");
       
   884 	Lex=&String[0];
       
   885 	test((ret=Lex.Val(TU16, (TRadix)EHex))==KErrNone);
       
   886 	test(TU16==1);
       
   887 
       
   888 	_LL(&String[0], (TText8*)"ffFf");
       
   889 	Lex=&String[0];
       
   890 	test((ret=Lex.Val(TU16, (TRadix)EHex))==KErrNone);
       
   891 	test(TU16==65535);
       
   892 
       
   893 	_LL(&String[0], (TText8*)"10000");
       
   894 	Lex=&String[0];			
       
   895 	test((ret=Lex.Val(TU16, (TRadix)EHex))==KErrOverflow);
       
   896 
       
   897 
       
   898 
       
   899 	////////////////////////////
       
   900 	// Test Val(TUint32, TRadix)
       
   901 	////////////////////////////
       
   902 	test.Next(_L("Val(TUint32, TRadix)"));
       
   903 	TUint32 TU32;
       
   904 
       
   905 	_LL(&String[0], (TText8*)"00");
       
   906 	Lex=&String[0];
       
   907 	test((ret=Lex.Val(TU32, (TRadix)EBinary))==KErrNone);
       
   908 	test(TU32==0);
       
   909 
       
   910 	_LL(&String[0], (TText8*)"01");
       
   911 	Lex=&String[0];
       
   912 	test((ret=Lex.Val(TU32, (TRadix)EBinary))==KErrNone);
       
   913 	test(TU32==1);
       
   914 
       
   915 	_LL(&String[0], (TText8*)"11111111111111111111111111111111");
       
   916 	Lex=&String[0];
       
   917 	test((ret=Lex.Val(TU32, (TRadix)EBinary))==KErrNone);
       
   918 	test(TU32==4294967295u);
       
   919 
       
   920 	_LL(&String[0], (TText8*)"100000000000000000000000000000000");
       
   921 	Lex=&String[0];
       
   922 	test((ret=Lex.Val(TU32, (TRadix)EBinary))==KErrOverflow);
       
   923 
       
   924 	_LL(&String[0], (TText8*)"00");
       
   925 	Lex=&String[0];
       
   926 	test((ret=Lex.Val(TU32, (TRadix)EOctal))==KErrNone);
       
   927 	test(TU32==0);
       
   928 
       
   929 	_LL(&String[0], (TText8*)"01");
       
   930 	Lex=&String[0];
       
   931 	test((ret=Lex.Val(TU32, (TRadix)EOctal))==KErrNone);
       
   932 	test(TU32==1);
       
   933 
       
   934 	_LL(&String[0], (TText8*)"37777777777");
       
   935 	Lex=&String[0];
       
   936 	test((ret=Lex.Val(TU32, (TRadix)EOctal))==KErrNone);
       
   937 	test(TU32==4294967295u);
       
   938 
       
   939 	_LL(&String[0], (TText8*)"40000000000");
       
   940 	Lex=&String[0];			
       
   941 	test((ret=Lex.Val(TU32, (TRadix)EOctal))==KErrOverflow);
       
   942 
       
   943 	_LL(&String[0], (TText8*)"00");
       
   944 	Lex=&String[0];
       
   945 	test((ret=Lex.Val(TU32, (TRadix)EDecimal))==KErrNone);
       
   946 	test(TU32==0);
       
   947 
       
   948 	_LL(&String[0], (TText8*)"01");
       
   949 	Lex=&String[0];
       
   950 	test((ret=Lex.Val(TU32, (TRadix)EDecimal))==KErrNone);
       
   951 	test(TU32==1);
       
   952 
       
   953 	_LL(&String[0], (TText8*)"4294967295");
       
   954 	Lex=&String[0];
       
   955 	test((ret=Lex.Val(TU32, (TRadix)EDecimal))==KErrNone);
       
   956 	test(TU32==4294967295u);
       
   957 
       
   958 	_LL(&String[0], (TText8*)"4294967296");
       
   959 	Lex=&String[0];			
       
   960 	test((ret=Lex.Val(TU32, (TRadix)EDecimal))==KErrOverflow);
       
   961 
       
   962 	_LL(&String[0], (TText8*)"00");
       
   963 	Lex=&String[0];
       
   964 	test((ret=Lex.Val(TU32, (TRadix)EHex))==KErrNone);
       
   965 	test(TU32==0);
       
   966 
       
   967 	_LL(&String[0], (TText8*)"01");
       
   968 	Lex=&String[0];
       
   969 	test((ret=Lex.Val(TU32, (TRadix)EHex))==KErrNone);
       
   970 	test(TU32==1);
       
   971 
       
   972 	_LL(&String[0], (TText8*)"FFFFFFFF");
       
   973 	Lex=&String[0];
       
   974 	test((ret=Lex.Val(TU32, (TRadix)EHex))==KErrNone);
       
   975 	test(TU32==4294967295u);
       
   976 
       
   977 	_LL(&String[0], (TText8*)"100000000");
       
   978 	Lex=&String[0];			
       
   979 	test((ret=Lex.Val(TU32, (TRadix)EHex))==KErrOverflow);
       
   980 
       
   981  	///////////////////////////////////
       
   982 	// Test Val(TInt64, TRadix)
       
   983 	///////////////////////////////////
       
   984 	test.Next(_L("Val(TInt64,TRadix)"));
       
   985 	TInt64 TI64;
       
   986 
       
   987 	_LL(&String[0], (TText8*)"00");
       
   988 	Lex=&String[0];
       
   989 	test((ret=Lex.Val(TI64, (TRadix)EBinary))==KErrNone);
       
   990 	test(TI64==0);
       
   991 
       
   992 	_LL(&String[0], (TText8*)"01");
       
   993 	Lex=&String[0];
       
   994 	test((ret=Lex.Val(TI64, (TRadix)EBinary))==KErrNone);
       
   995 	test(TI64==1);
       
   996 
       
   997 	_LL(&String[0], (TText8*)"11111111111111111111111111111111");
       
   998 	Lex=&String[0];
       
   999 	test((ret=Lex.Val(TI64, (TRadix)EBinary))==KErrNone);
       
  1000 	test(TI64==TInt64(0xffffffffu));
       
  1001 
       
  1002 	_LL(&String[0], (TText8*)"100000000000000000000000000000000");
       
  1003 	Lex=&String[0];
       
  1004 	test((ret=Lex.Val(TI64, (TRadix)EBinary))==KErrNone);
       
  1005 	test(TI64==MAKE_TINT64(0x1,0x0));
       
  1006 
       
  1007  	_LL(&String[0], (TText8*)"1111111111111111111111111111111111111111111111111111111111111111");
       
  1008 	Lex=&String[0];
       
  1009 	test((ret=Lex.Val(TI64, (TRadix)EBinary))==KErrNone);
       
  1010 	test(TI64==MAKE_TINT64(0xffffffffu,0xffffffffu));
       
  1011 
       
  1012 	_LL(&String[0], (TText8*)"10000000000000000000000000000000000000000000000000000000000000000");
       
  1013 	Lex=&String[0];
       
  1014 	test((ret=Lex.Val(TI64, (TRadix)EBinary))==KErrOverflow);
       
  1015 
       
  1016 	_LL(&String[0], (TText8*)"00");
       
  1017 	Lex=&String[0];
       
  1018 	test((ret=Lex.Val(TI64, (TRadix)EOctal))==KErrNone);
       
  1019 	test(TI64==0);
       
  1020 
       
  1021 	_LL(&String[0], (TText8*)"01");
       
  1022 	Lex=&String[0];
       
  1023 	test((ret=Lex.Val(TI64, (TRadix)EOctal))==KErrNone);
       
  1024 	test(TI64==1);
       
  1025 
       
  1026 	_LL(&String[0], (TText8*)"37777777777");
       
  1027 	Lex=&String[0];
       
  1028 	test((ret=Lex.Val(TI64, (TRadix)EOctal))==KErrNone);
       
  1029 	test(TI64==TInt64(0xffffffffu));
       
  1030 
       
  1031 	_LL(&String[0], (TText8*)"40000000000");
       
  1032 	Lex=&String[0];			
       
  1033 	test((ret=Lex.Val(TI64, (TRadix)EOctal))==KErrNone);
       
  1034 	test(TI64==MAKE_TINT64(0x1,0x0));
       
  1035 
       
  1036 	_LL(&String[0], (TText8*)"1777777777777777777777");
       
  1037 	Lex=&String[0];
       
  1038 	test((ret=Lex.Val(TI64, (TRadix)EOctal))==KErrNone);
       
  1039 	test(TI64==MAKE_TINT64(0xffffffffu,0xffffffffu));
       
  1040 
       
  1041 	_LL(&String[0], (TText8*)"2000000000000000000000");
       
  1042 	Lex=&String[0];			
       
  1043 	test((ret=Lex.Val(TI64, (TRadix)EOctal))==KErrOverflow);
       
  1044 
       
  1045 	_LL(&String[0], (TText8*)"00");
       
  1046 	Lex=&String[0];				
       
  1047 	test((ret=Lex.Val(TI64, (TRadix)EDecimal))==KErrNone);
       
  1048 	test(TI64==0);
       
  1049 
       
  1050 	_LL(&String[0], (TText8*)"00");
       
  1051 	Lex=&String[0]; //************** iNext is set to "" by Val
       
  1052 	test((ret=Lex.Val(TI64))==KErrNone);	
       
  1053 	test(TI64==0);
       
  1054 
       
  1055 	_LL(&String[0], (TText8*)"01");
       
  1056 	Lex=&String[0];
       
  1057 	test((ret=Lex.Val(TI64, (TRadix)EDecimal))==KErrNone);
       
  1058 	test(TI64==1);
       
  1059 	_LL(&String[0], (TText8*)"01");
       
  1060 	Lex=&String[0];
       
  1061 	test((ret=Lex.Val(TI64))==KErrNone);
       
  1062 	test(TI64==1);
       
  1063 
       
  1064 	_LL(&String[0], (TText8*)"4294967295");
       
  1065 	Lex=&String[0];
       
  1066 	test((ret=Lex.Val(TI64, (TRadix)EDecimal))==KErrNone);
       
  1067 	test(TI64==TInt64(0xffffffffu));
       
  1068 	_LL(&String[0], (TText8*)"4294967295");
       
  1069 	Lex=&String[0];
       
  1070 	test((ret=Lex.Val(TI64))==KErrNone);
       
  1071 	test(TI64==TInt64(0xffffffffu));
       
  1072 
       
  1073 	_LL(&String[0], (TText8*)"4294967296");
       
  1074 	Lex=&String[0];			
       
  1075 	test((ret=Lex.Val(TI64, (TRadix)EDecimal))==KErrNone);
       
  1076 	test(TI64==MAKE_TINT64(1,0)); 
       
  1077 	_LL(&String[0], (TText8*)"4294967296");
       
  1078 	Lex=&String[0];
       
  1079 	test((ret=Lex.Val(TI64))==KErrNone);   
       
  1080 	test(TI64==MAKE_TINT64(1,0)); 
       
  1081 
       
  1082 	_LL(&String[0], (TText8*)"18446744073709551615");
       
  1083 	Lex=&String[0];
       
  1084 	test((ret=Lex.Val(TI64, (TRadix)EDecimal))==KErrNone);
       
  1085 	test(TI64==MAKE_TINT64(0xffffffffu,0xffffffffu));
       
  1086 	_LL(&String[0], (TText8*)"18446744073709551616");
       
  1087 	Lex=&String[0];
       
  1088 	test((ret=Lex.Val(TI64))==KErrOverflow);
       
  1089 
       
  1090 	_LL(&String[0], (TText8*)"-1");
       
  1091 	Lex=&String[0];			
       
  1092 	test((ret=Lex.Val(TI64, (TRadix)EDecimal))==KErrGeneral);
       
  1093 
       
  1094 	_LL(&String[0], (TText8*)"00");
       
  1095 	Lex=&String[0];
       
  1096 	test((ret=Lex.Val(TI64, (TRadix)EHex))==KErrNone);
       
  1097 	test(TI64==0);
       
  1098 
       
  1099 	_LL(&String[0], (TText8*)"01");
       
  1100 	Lex=&String[0];
       
  1101 	test((ret=Lex.Val(TI64, (TRadix)EHex))==KErrNone);
       
  1102 	test(TI64==1);
       
  1103 
       
  1104 	_LL(&String[0], (TText8*)"FFFFFFFF");
       
  1105 	Lex=&String[0];
       
  1106 	test((ret=Lex.Val(TI64, (TRadix)EHex))==KErrNone);
       
  1107 	test(TI64==TInt64(0xffffffffu));
       
  1108 
       
  1109 	_LL(&String[0], (TText8*)"100000000");
       
  1110 	Lex=&String[0];			
       
  1111 	test((ret=Lex.Val(TI64, (TRadix)EHex))==KErrNone);
       
  1112 	test(TI64==MAKE_TINT64(1,0)); 
       
  1113 
       
  1114 	_LL(&String[0], (TText8*)"FFFFFFFFffffffff");
       
  1115 	Lex=&String[0];
       
  1116 	test((ret=Lex.Val(TI64, (TRadix)EHex))==KErrNone);
       
  1117 	test(TI64==MAKE_TINT64(0xffffffffu,0xffffffffu));
       
  1118 
       
  1119 	_LL(&String[0], (TText8*)"10000000000000000");
       
  1120 	Lex=&String[0];			
       
  1121 	test((ret=Lex.Val(TI64, (TRadix)EHex))==KErrOverflow);
       
  1122 
       
  1123 
       
  1124 	///////////////////////////////////
       
  1125 	// Test Val(TUint, TRadix=(TRadix)EDecimal)
       
  1126 	///////////////////////////////////
       
  1127 	test.Next(_L("Val(TUint, TRadix=(TRadix)EDecimal)"));
       
  1128 	TUint TU;
       
  1129 
       
  1130 	_LL(&String[0], (TText8*)"00");
       
  1131 	Lex=&String[0];
       
  1132 	test((ret=Lex.Val(TU, (TRadix)EBinary))==KErrNone);
       
  1133 	test(TU==0);
       
  1134 
       
  1135 	_LL(&String[0], (TText8*)"01");
       
  1136 	Lex=&String[0];
       
  1137 	test((ret=Lex.Val(TU, (TRadix)EBinary))==KErrNone);
       
  1138 	test(TU==1);
       
  1139 
       
  1140 	_LL(&String[0], (TText8*)"11111111111111111111111111111111");
       
  1141 	Lex=&String[0];
       
  1142 	test((ret=Lex.Val(TU, (TRadix)EBinary))==KErrNone);
       
  1143 	test(TU==4294967295u);
       
  1144 
       
  1145 	_LL(&String[0], (TText8*)"100000000000000000000000000000000");
       
  1146 	Lex=&String[0];
       
  1147 	test((ret=Lex.Val(TU, (TRadix)EBinary))==KErrOverflow);
       
  1148 
       
  1149 	_LL(&String[0], (TText8*)"00");
       
  1150 	Lex=&String[0];
       
  1151 	test((ret=Lex.Val(TU, (TRadix)EOctal))==KErrNone);
       
  1152 	test(TU==0);
       
  1153 
       
  1154 	_LL(&String[0], (TText8*)"01");
       
  1155 	Lex=&String[0];
       
  1156 	test((ret=Lex.Val(TU, (TRadix)EOctal))==KErrNone);
       
  1157 	test(TU==1);
       
  1158 
       
  1159 	_LL(&String[0], (TText8*)"37777777777");
       
  1160 	Lex=&String[0];
       
  1161 	test((ret=Lex.Val(TU, (TRadix)EOctal))==KErrNone);
       
  1162 	test(TU==4294967295u);
       
  1163 
       
  1164 	_LL(&String[0], (TText8*)"40000000000");
       
  1165 	Lex=&String[0];			
       
  1166 	test((ret=Lex.Val(TU, (TRadix)EOctal))==KErrOverflow);
       
  1167 
       
  1168 	_LL(&String[0], (TText8*)"00");
       
  1169 	Lex=&String[0];				
       
  1170 	test((ret=Lex.Val(TU, (TRadix)EDecimal))==KErrNone);
       
  1171 	test(TU==0);
       
  1172 
       
  1173 	_LL(&String[0], (TText8*)"00");
       
  1174 	Lex=&String[0]; //************** iNext is set to "" by Val
       
  1175 	test((ret=Lex.Val(TU))==KErrNone);	
       
  1176 	test(TU==0);
       
  1177 
       
  1178 	_LL(&String[0], (TText8*)"01");
       
  1179 	Lex=&String[0];
       
  1180 	test((ret=Lex.Val(TU, (TRadix)EDecimal))==KErrNone);
       
  1181 	test(TU==1);
       
  1182 	_LL(&String[0], (TText8*)"01");
       
  1183 	Lex=&String[0];
       
  1184 	test((ret=Lex.Val(TU))==KErrNone);
       
  1185 	test(TU==1);
       
  1186 
       
  1187 	_LL(&String[0], (TText8*)"4294967295");
       
  1188 	Lex=&String[0];
       
  1189 	test((ret=Lex.Val(TU, (TRadix)EDecimal))==KErrNone);
       
  1190 	test(TU==4294967295u);
       
  1191 	_LL(&String[0], (TText8*)"4294967295");
       
  1192 	Lex=&String[0];
       
  1193 	test((ret=Lex.Val(TU))==KErrNone);
       
  1194 	test(TU==4294967295u);
       
  1195 
       
  1196 	_LL(&String[0], (TText8*)"4294967296");
       
  1197 	Lex=&String[0];			
       
  1198 	test((ret=Lex.Val(TU, (TRadix)EDecimal))==KErrOverflow); 
       
  1199 	_LL(&String[0], (TText8*)"4294967296");
       
  1200 	Lex=&String[0];
       
  1201 	test((ret=Lex.Val(TU))==KErrOverflow);   
       
  1202 
       
  1203 	_LL(&String[0], (TText8*)"00");
       
  1204 	Lex=&String[0];
       
  1205 	test((ret=Lex.Val(TU, (TRadix)EHex))==KErrNone);
       
  1206 	test(TU==0);
       
  1207 
       
  1208 	_LL(&String[0], (TText8*)"01");
       
  1209 	Lex=&String[0];
       
  1210 	test((ret=Lex.Val(TU, (TRadix)EHex))==KErrNone);
       
  1211 	test(TU==1);
       
  1212 
       
  1213 	_LL(&String[0], (TText8*)"FFFFFFFF");
       
  1214 	Lex=&String[0];
       
  1215 	test((ret=Lex.Val(TU, (TRadix)EHex))==KErrNone);
       
  1216 	test(TU==4294967295u);
       
  1217 
       
  1218 	_LL(&String[0], (TText8*)"100000000");
       
  1219 	Lex=&String[0];			
       
  1220 	test((ret=Lex.Val(TU, (TRadix)EHex))==KErrOverflow);
       
  1221 
       
  1222 
       
  1223 	/////////////////////////////////
       
  1224 	// Test Val(TInt32, TUint aLimit)
       
  1225 	/////////////////////////////////		  
       
  1226 	// This is called by several of the other Val methods and so has been indirectly tested already
       
  1227 	test.Next(_L("Val(TInt32, TUint aLimit"));
       
  1228 
       
  1229 	_LL(&String[0], (TText8*)"1000");
       
  1230 	Lex=&String[0];
       
  1231 	test((ret=Lex.BoundedVal(T32,1000))==KErrNone);
       
  1232 	test(T32==1000);
       
  1233 
       
  1234 	_LL(&String[0], (TText8*)"1001");
       
  1235 	Lex=&String[0];
       
  1236 	test((ret=Lex.BoundedVal(T32, 1000))==KErrOverflow);
       
  1237 
       
  1238 	_LL(&String[0], (TText8*)"-1000");
       
  1239 	Lex=&String[0];
       
  1240 	test((ret=Lex.BoundedVal(T32, 1000))==KErrNone);
       
  1241 	test(T32==-1000);
       
  1242 
       
  1243 	_LL(&String[0], (TText8*)"-1001");
       
  1244 	Lex=&String[0];
       
  1245 	test((ret=Lex.BoundedVal(T32, 1000))==KErrNone);
       
  1246 	test(T32==-1001);
       
  1247 
       
  1248 	_LL(&String[0], (TText8*)"-1002");
       
  1249 	Lex=&String[0];
       
  1250 	test((ret=Lex.BoundedVal(T32, 1000))==KErrOverflow);
       
  1251 
       
  1252 	_LL(&String[0], (TText8*)"0");
       
  1253 	Lex=&String[0];
       
  1254 	test((ret=Lex.BoundedVal(T32, 0))==KErrNone);
       
  1255 	test(T32==0);
       
  1256 	
       
  1257 	_LL(&String[0], (TText8*)"1");
       
  1258 	Lex=&String[0];
       
  1259 	test((ret=Lex.BoundedVal(T32, 0))==KErrOverflow);	   
       
  1260 
       
  1261 
       
  1262 	/////////////////////////////////////////////////
       
  1263 	// Test Val(TUInt32, TRadix aRadix, TUint aLimit)
       
  1264 	////////////////////////////////////////////////
       
  1265 	// This is called by several of the other Val methods and so has been indirectly tested already
       
  1266 	test.Next(_L("Val(TUInt32, TRadix, TUint)"));
       
  1267 
       
  1268 	// Test bug found during previous testing 
       
  1269 	_LL(&String[0], (TText8*)"10");
       
  1270 	Lex=&String[0];
       
  1271 	test((ret=Lex.BoundedVal(TU32, (TRadix)EDecimal, 10))==KErrNone);
       
  1272 	test(TU32==10);
       
  1273 
       
  1274 	_LL(&String[0], (TText8*)"11");
       
  1275 	Lex=&String[0];
       
  1276 	test((ret=Lex.BoundedVal(TU32, (TRadix)EDecimal, 10))==KErrOverflow);
       
  1277 
       
  1278 	_LL(&String[0], (TText8*)"19");
       
  1279 	Lex=&String[0];
       
  1280 	test((ret=Lex.BoundedVal(TU32, (TRadix)EDecimal, 10))==KErrOverflow);
       
  1281 
       
  1282 	_LL(&String[0], (TText8*)"20");
       
  1283 	Lex=&String[0];
       
  1284 	test((ret=Lex.BoundedVal(TU32, (TRadix)EDecimal, 10))==KErrOverflow);
       
  1285 
       
  1286 	/////////////////////////////////////////////////
       
  1287 	// Test Val(TInt64, TRadix aRadix, TInt64 aLimit)
       
  1288 	////////////////////////////////////////////////
       
  1289 	test.Next(_L("Val(TInt64, TRadix, TInt64)"));
       
  1290 
       
  1291 	_LL(&String[0], (TText8*)"10");
       
  1292 	Lex=&String[0];
       
  1293 	test((ret=Lex.BoundedVal(TI64, (TRadix)EDecimal, 10))==KErrNone);
       
  1294 	test(TI64==TInt64(10));
       
  1295 
       
  1296 	_LL(&String[0], (TText8*)"11");
       
  1297 	Lex=&String[0];
       
  1298 	test((ret=Lex.BoundedVal(TI64, (TRadix)EDecimal, 10))==KErrOverflow);
       
  1299 
       
  1300 	_LL(&String[0], (TText8*)"19");
       
  1301 	Lex=&String[0];
       
  1302 	test((ret=Lex.BoundedVal(TI64, (TRadix)EDecimal, 10))==KErrOverflow);
       
  1303 
       
  1304 	_LL(&String[0], (TText8*)"20");
       
  1305 	Lex=&String[0];
       
  1306 	test((ret=Lex.BoundedVal(TI64, (TRadix)EDecimal, 10))==KErrOverflow);
       
  1307 
       
  1308 	_LL(&String[0], (TText8*)"34532739886900");
       
  1309 	Lex=&String[0];
       
  1310 	test((ret=Lex.BoundedVal(TI64, (TRadix)EDecimal, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrNone);
       
  1311 	test(TI64==MAKE_TINT64(0x1f68u,0x47b1af34u));
       
  1312 
       
  1313 	_LL(&String[0], (TText8*)"34532739886901");
       
  1314 	Lex=&String[0];
       
  1315 	test((ret=Lex.BoundedVal(TI64, (TRadix)EDecimal, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrOverflow);
       
  1316 
       
  1317 	_LL(&String[0], (TText8*)"74532739886901");
       
  1318 	Lex=&String[0];
       
  1319 	test((ret=Lex.BoundedVal(TI64, (TRadix)EDecimal, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrOverflow);
       
  1320 
       
  1321 	_LL(&String[0], (TText8*)"6901");
       
  1322 	Lex=&String[0];
       
  1323 	test((ret=Lex.BoundedVal(TI64, (TRadix)EDecimal, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrNone);
       
  1324 	test(TI64==TInt64(6901));
       
  1325 
       
  1326 	_LL(&String[0], (TText8*)"1f6847b1af34");
       
  1327 	Lex=&String[0];
       
  1328 	test((ret=Lex.BoundedVal(TI64, (TRadix)EHex, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrNone);
       
  1329 	test(TI64==MAKE_TINT64(0x1f68u,0x47b1af34u));
       
  1330 
       
  1331 	_LL(&String[0], (TText8*)"1f6847b1af35");
       
  1332 	Lex=&String[0];
       
  1333 	test((ret=Lex.BoundedVal(TI64, (TRadix)EHex, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrOverflow);
       
  1334 
       
  1335 	_LL(&String[0], (TText8*)"1f6847b1af340");
       
  1336 	Lex=&String[0];
       
  1337 	test((ret=Lex.BoundedVal(TI64, (TRadix)EHex, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrOverflow);
       
  1338 
       
  1339 	_LL(&String[0], (TText8*)"1e82791aed35");
       
  1340 	Lex=&String[0];
       
  1341 	test((ret=Lex.BoundedVal(TI64, (TRadix)EHex, TInt64(0x56fba45u)))==KErrOverflow);
       
  1342 
       
  1343 	/////////////////////////////////////////////////
       
  1344 	// Test Val(TInt64, TInt64 aLimit)
       
  1345 	////////////////////////////////////////////////
       
  1346 	test.Next(_L("Val(TInt64, TInt64)"));
       
  1347 
       
  1348 	_LL(&String[0], (TText8*)"10");
       
  1349 	Lex=&String[0];
       
  1350 	test((ret=Lex.BoundedVal(TI64, 10))==KErrNone);
       
  1351 	test(TI64==TInt64(10));
       
  1352 
       
  1353 	_LL(&String[0], (TText8*)"11");
       
  1354 	Lex=&String[0];
       
  1355 	test((ret=Lex.BoundedVal(TI64, 10))==KErrOverflow);
       
  1356 
       
  1357 	_LL(&String[0], (TText8*)"19");
       
  1358 	Lex=&String[0];
       
  1359 	test((ret=Lex.BoundedVal(TI64, 10))==KErrOverflow);
       
  1360 
       
  1361 	_LL(&String[0], (TText8*)"20");
       
  1362 	Lex=&String[0];
       
  1363 	test((ret=Lex.BoundedVal(TI64, 10))==KErrOverflow);
       
  1364 
       
  1365 	_LL(&String[0], (TText8*)"34532739886900");
       
  1366 	Lex=&String[0];
       
  1367 	test((ret=Lex.BoundedVal(TI64, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrNone);
       
  1368 	test(TI64==MAKE_TINT64(0x1f68u,0x47b1af34u));
       
  1369 
       
  1370 	_LL(&String[0], (TText8*)"34532739886901");
       
  1371 	Lex=&String[0];
       
  1372 	test((ret=Lex.BoundedVal(TI64, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrOverflow);
       
  1373 
       
  1374 	_LL(&String[0], (TText8*)"74532739886901");
       
  1375 	Lex=&String[0];
       
  1376 	test((ret=Lex.BoundedVal(TI64, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrOverflow);
       
  1377 
       
  1378 	_LL(&String[0], (TText8*)"6901");
       
  1379 	Lex=&String[0];
       
  1380 	test((ret=Lex.BoundedVal(TI64, MAKE_TINT64(0x1f68u,0x47b1af34u)))==KErrNone);
       
  1381 	test(TI64==TInt64(6901));
       
  1382 
       
  1383 	test.End();
       
  1384 	}
       
  1385 
       
  1386 void testLocale()
       
  1387 	{
       
  1388 
       
  1389 	TLocale current;
       
  1390 	current.Refresh();
       
  1391 	TLocale loc;
       
  1392 	loc.Refresh();
       
  1393 
       
  1394 	TReal64 v,v8;
       
  1395 	TLex l;
       
  1396 	TLex8 l8;
       
  1397 	TInt r;
       
  1398 
       
  1399 	loc.SetDecimalSeparator('.');
       
  1400 	loc.Set();
       
  1401 	l=_L("-12.34");
       
  1402 	l8=_L8("-12.34");
       
  1403 	r=l.Val(v);
       
  1404 	r=l8.Val(v8);
       
  1405 	test(r==KErrNone);
       
  1406 	test(v==-12.34);
       
  1407 	test(v==v8);
       
  1408 
       
  1409 	l=_L("-12.34");
       
  1410 	l8=_L8("-12.34");
       
  1411 	r=l.Val(v,'.');
       
  1412 	r=l8.Val(v8,'.');
       
  1413 	test(r==KErrNone);
       
  1414 	test(v==-12.34);
       
  1415 	test(v==v8);
       
  1416 	l=_L("-12.34");
       
  1417 	l8=_L8("-12.34");
       
  1418 	r=l.Val(v,',');
       
  1419 	r=l8.Val(v8,',');
       
  1420 	test(r==KErrNone);
       
  1421 	test(v==-12);
       
  1422 	test(v==v8);
       
  1423 
       
  1424 	l=_L("-12,34");
       
  1425 	l8=_L8("-12,34");
       
  1426 	r=l.Val(v);
       
  1427 	r=l8.Val(v8);
       
  1428 	test(r==KErrNone);
       
  1429 	test(v==-12);
       
  1430 	test(v==v8);
       
  1431 	l=_L("-12,34");
       
  1432 	l8=_L8("-12,34");
       
  1433 	r=l.Val(v,'.');
       
  1434 	r=l8.Val(v8,'.');
       
  1435 	test(r==KErrNone);
       
  1436 	test(v==-12);
       
  1437 	test(v==v8);
       
  1438 	l=_L("-12,34");
       
  1439 	l8=_L8("-12,34");
       
  1440 	r=l.Val(v,',');
       
  1441 	r=l8.Val(v8,',');
       
  1442 	test(r==KErrNone);
       
  1443 	test(v==-12.34);
       
  1444 	test(v==v8);
       
  1445 
       
  1446 	loc.SetDecimalSeparator(',');
       
  1447 	loc.Set();
       
  1448 	l=_L("-12.34");
       
  1449 	l8=_L8("-12.34");
       
  1450 	r=l.Val(v);
       
  1451 	r=l8.Val(v8);
       
  1452 	test(r==KErrNone);
       
  1453 	test(v==-12);
       
  1454 	test(v==v8);
       
  1455 
       
  1456 	l=_L("-12.34");
       
  1457 	l8=_L8("-12.34");
       
  1458 	r=l.Val(v,'.');
       
  1459 	r=l8.Val(v8,'.');
       
  1460 	test(r==KErrNone);
       
  1461 	test(v==-12.34);
       
  1462 	test(v==v8);
       
  1463 	l=_L("-12.34");
       
  1464 	l8=_L8("-12.34");
       
  1465 	r=l.Val(v,',');
       
  1466 	r=l8.Val(v8,',');
       
  1467 	test(r==KErrNone);
       
  1468 	test(v==-12);
       
  1469 	test(v==v8);
       
  1470 
       
  1471 	l=_L("-12,34");
       
  1472 	l8=_L8("-12,34");
       
  1473 	r=l.Val(v);
       
  1474 	r=l8.Val(v8);
       
  1475 	test(r==KErrNone);
       
  1476 	test(v==-12.34);
       
  1477 	l=_L("-12,34");
       
  1478 	l8=_L8("-12,34");
       
  1479 	r=l.Val(v,'.');
       
  1480 	r=l8.Val(v8,'.');
       
  1481 	test(r==KErrNone);
       
  1482 	test(v==-12);
       
  1483 	test(v==v8);
       
  1484 	l=_L("-12,34");
       
  1485 	l8=_L8("-12,34");
       
  1486 	r=l.Val(v,',');
       
  1487 	r=l8.Val(v8,',');
       
  1488 	test(r==KErrNone);
       
  1489 	test(v==-12.34);
       
  1490 	test(v==v8);
       
  1491 
       
  1492 	loc.Set();
       
  1493 	current.Set();
       
  1494 	}
       
  1495 
       
  1496 #pragma warning( disable : 4705 )	// statement has no effect
       
  1497 GLDEF_C TInt E32Main()
       
  1498     {
       
  1499 
       
  1500 	test.Title(); 
       
  1501 
       
  1502 	test.Start(_L("********* TLEX **********"));
       
  1503 #if defined(_UNICODE)
       
  1504 	TestTLex<TPtrC, TLex, TLexMark, TBuf<0x40>, TLex16Dump, TLexMark16Dump, TText> T;
       
  1505 #else
       
  1506 	TestTLex<TPtrC, TLex, TLexMark, TBuf<0x40>, TLex8Dump, TLexMark8Dump, TText> T;
       
  1507 #endif
       
  1508 	test.Next(_L("TText 1"));
       
  1509 	T.Test1();
       
  1510 	test.Next(_L("TText 2"));
       
  1511 	T.Test2();
       
  1512 	test.Next(_L("TText 3"));
       
  1513 	T.Test3();
       
  1514 	test.Next(_L("TText 4"));
       
  1515 	T.Test4();
       
  1516 	test.Next(_L("TText 5"));
       
  1517 	T.Test5();
       
  1518 
       
  1519 	TestTLex<TPtrC8, TLex8, TLexMark8, TBuf8<0x40>, TLex8Dump, TLexMark8Dump, TText8> T8;
       
  1520 	test.Next(_L("TText8 1"));
       
  1521 	T8.Test1();
       
  1522 	test.Next(_L("TText8 2"));
       
  1523 	T8.Test2();
       
  1524 	test.Next(_L("TText8 3"));
       
  1525 	T8.Test3();
       
  1526 	test.Next(_L("TText8 4"));
       
  1527 	T8.Test4();
       
  1528 	test.Next(_L("TText8 5"));
       
  1529 	T8.Test5();
       
  1530   
       
  1531 	TestTLex<TPtrC16, TLex16, TLexMark16, TBuf16<0x40>, TLex16Dump, TLexMark16Dump, TText16> T16;
       
  1532 	test.Next(_L("TText16 1"));
       
  1533 	T16.Test1();
       
  1534 	test.Next(_L("TText16 2"));
       
  1535 	T16.Test2();
       
  1536 	test.Next(_L("TText16 3"));
       
  1537 	T16.Test3();
       
  1538 	test.Next(_L("TText16 4"));
       
  1539 	T16.Test4();
       
  1540 	test.Next(_L("TText16 5"));
       
  1541 	T16.Test5();
       
  1542 
       
  1543 	test.Next(_L("Test TLex in different locales"));
       
  1544 	testLocale();
       
  1545 
       
  1546 	test.End();
       
  1547 	return(KErrNone);
       
  1548     }
       
  1549 #pragma warning( default : 4705 )
       
  1550