diff -r 000000000000 -r a41df078684a kerneltest/f32test/server/b_rand.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/server/b_rand.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,463 @@ +// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// f32test\server\b_rand.cpp +// +// + +#include +#include +#include +#include "t_server.h" + +const TInt64 KInitialSeedL=24; +const TInt KInitialSeed5=42; +const TInt KMaxStream=0x1000; + +class RStream + { +public: + RStream(); + void Set(RFile& aFile); + TInt Read(TDes8& aDes); +private: + const TText8* iNext; + const TText8* iEnd; + TBool iEOF; + RFile iFile; + TBuf8 iStream; + }; + +GLDEF_D RTest test(_L("B_RAND")); +LOCAL_D RFile TheFile1; +LOCAL_D RFile TheFile2; +LOCAL_D RFile TheFile3; +LOCAL_D RFile TheFile4; +LOCAL_D RFile TheFile5; +LOCAL_D TFileName fBuf; +LOCAL_D TFileName nameBuf1; +LOCAL_D TFileName nameBuf2; +LOCAL_D TFileName nameBuf3; +LOCAL_D TFileName nameBuf4; +LOCAL_D TFileName nameBuf5; +LOCAL_D TBuf8<0x200> chkPat; +LOCAL_D TBuf8<0x200> testPat2; +LOCAL_D TBuf8<0x400> testPat3; +LOCAL_D TBuf8<0x400> testPat4; +LOCAL_D TBuf8<0x40> testPat5; +LOCAL_D TBuf8<0x400> buf; +LOCAL_D RStream sBuf; +LOCAL_D TPtrC testDir(_S("\\F32-TST\\")); + +LOCAL_C void TestRet(TInt aRet) +// +// Display error value if aRet!=KErrNone +// + { + + if (aRet==KErrNone) + return; + test.Printf(_L("Error: %d\n"),aRet); + test(EFalse); + } + +#if defined(__SLOW_TEST__) +LOCAL_C void CheckFile(const RFile& aFile,const TChar aChar) +// +// Check that aFile only contains aChar and '\n' characters +// + { + + TBuf8<0x400> buf(0x400); + TInt pos=0; + TInt r=aFile.Seek(ESeekStart,pos); + TestRet(r); + while(buf.Length()==buf.MaxLength()) + { + r=aFile.Read(buf); + TestRet(r); + TInt len=buf.Length(); + while(len--) + test(buf[len]=='\n' || aChar==buf[len]); + } + } +#else +LOCAL_C void CheckFile(const RFile& /*aFile*/,const TChar /*aChar*/) + { + } +#endif + +LOCAL_C void CheckFile1() + {CheckFile(TheFile1,'A');} +LOCAL_C void CheckFile2() + {CheckFile(TheFile2,'B');} + +RStream::RStream() +// +// Constructor. +// + { + } + +void RStream::Set(RFile& aFile) +// +// Initialize the stream on a file. +// + { + + iEOF=EFalse; + iFile=aFile; + iStream.Zero(); + iNext=iStream.Ptr(); + iEnd=iNext; + } + +TInt RStream::Read(TDes8& aDes) +// +// Read from the stream. +// + { + + TText8* pD=(TText8*)aDes.Ptr(); + TInt len=aDes.MaxLength(); + TInt newLen=0; + while (newLen=iEnd) + { + if (iEOF) + { + if (newLen==0) + return(KErrEof); + aDes.SetLength(newLen); + return(KErrNone); + } + TInt r=iFile.Read(iStream); + if (r!=KErrNone) + return(r); + if (iStream.Length()!=iStream.MaxLength()) + iEOF=ETrue; + iNext=iStream.Ptr(); + iEnd=iNext+iStream.Length(); + continue; + } + TUint c=(*iNext++); + if (c=='\n') + { + aDes.SetLength(newLen); + return(KErrNone); + } + *pD++=(TText8)c; + newLen++; + } + return(KErrTooBig); + } + + +GLDEF_C void CallTestsL(void) +// +// Do tests relative to session path +// + { + + TTime timerC; + timerC.HomeTime(); + + test.Next(_L("Make test directory")); +// + TInt n_times=400; + testPat2.Fill('B',testPat2.MaxLength()); + testPat3.Fill('C',testPat3.MaxLength()); + testPat4.Fill('D',testPat4.MaxLength()); +// + TInt r=TheFile1.Temp(TheFs,testDir,nameBuf1,EFileStream|EFileWrite); + TestRet(r); + test.Printf(_L("Created1: %S\n"),&nameBuf1); + TInt sum1=0; +// + r=TheFile2.Temp(TheFs,testDir,nameBuf2,EFileStreamText|EFileWrite); + TestRet(r); + test.Printf(_L("Created2: %S\n"),&nameBuf2); + TInt sum2=0; +// + r=TheFile3.Temp(TheFs,testDir,nameBuf3,EFileStream|EFileWrite); + TestRet(r); + test.Printf(_L("Created3: %S\n"),&nameBuf3); + TInt sum3=0; +// + r=TheFile4.Temp(TheFs,testDir,nameBuf4,EFileStream|EFileWrite); + TestRet(r); + test.Printf(_L("Created4: %S\n"),&nameBuf4); + TInt sum4=0; +// + r=TheFile5.Temp(TheFs,testDir,nameBuf5,EFileStreamText|EFileWrite); + TestRet(r); + test.Printf(_L("Created5: %S\n"),&nameBuf5); + TInt sum5=0; + TheFile5.Close(); +// + TInt64 seed5=KInitialSeed5; + TInt64 seedL=KInitialSeedL; + TBuf<0x100> pBuf; + for (TInt rep=0;repF1 ")); // Write 1 byte to file1 + TPtrC8 pA=_L8("A"); + r=TheFile1.Write(pA); + TestRet(r); + CheckFile1(); + + CheckFile2(); + TInt len=(Math::Rand(seedL)&0xff); // 0 to 255 + sum2+=len; + pBuf.AppendFormat(_L("W%03u->F2 "),len); // Write len bytes to file2 + r=TheFile2.Write(testPat2,len); + TestRet(r); + r=TheFile2.Write(_L8("\n")); + TestRet(r); + CheckFile2(); + + if (Math::Rand(seedL)&0x10) + { + CheckFile2(); + len=(Math::Rand(seedL)&0x2ff); + sum3+=len; + pBuf.AppendFormat(_L("W%03u->F3 "),len); // Write len bytes to file3 + r=TheFile3.Write(testPat3,len); + TestRet(r); + CheckFile2(); + } + + if (Math::Rand(seedL)&0x10) + { + len=(Math::Rand(seedL)&0x3ff); + sum4+=len; + pBuf.AppendFormat(_L("W%04u->F4 "),len); // Write len bytes to file4 + r=TheFile4.Write(testPat4,len); + TestRet(r); +// CheckFile4(); + } + + if ((Math::Rand(seedL)&0x70)==0x70) + { + r=TheFile5.Open(TheFs,nameBuf5,EFileStreamText|EFileWrite); + TestRet(r); + TInt pos=0; + r=TheFile5.Seek(ESeekEnd,pos); + TestRet(r); + testPat5.Format(_L8("%8x\n"),Math::Rand(seed5)); + pBuf.Append(_L("W8->F5")); // Write 8 bytes to file5 + r=TheFile5.Write(testPat5); + TestRet(r); + TheFile5.Close(); + sum5+=8; + } + test.Printf(pBuf); + + if ((Math::Rand(seedL)&0xf0)==0xf0) + { + test.Printf(_L(" DELETE F3")); + TheFile3.Close(); + r=TheFs.Delete(nameBuf3); + TestRet(r); + r=TheFile3.Temp(TheFs,testDir,nameBuf3,EFileStream|EFileWrite); + TestRet(r); + sum3=0L; + } + if ((Math::Rand(seedL)&0xf0)==0xf0) + { + test.Printf(_L(" DELETE F4")); + TheFile4.Close(); + r=TheFs.Delete(nameBuf4); + TestRet(r); + r=TheFile4.Temp(TheFs,testDir,nameBuf4,EFileStream|EFileWrite); + TestRet(r); + sum4=0L; + } + if ((Math::Rand(seedL)&0x1f0)==0x1f0) + { + test.Printf(_L(" REPLACE F3")); + TheFile3.Close(); + TestRet(r); + r=TheFile3.Replace(TheFs,nameBuf3,EFileStream|EFileWrite); + TestRet(r); + sum3=0L; + } + if ((Math::Rand(seedL)&0x1f0)==0x1f0) + { + test.Printf(_L(" REPLACE F4")); + TheFile4.Close(); + r=TheFile4.Replace(TheFs,nameBuf4,EFileStream|EFileWrite); + TestRet(r); + sum4=0L; + } + if ((Math::Rand(seedL)&0x1f0)==0x1f0) + { + test.Printf(_L(" TRUNCATE F3 to zero")); + r=TheFile3.SetSize(0); + TestRet(r); + sum3=0L; + } + if ((Math::Rand(seedL)&0x1f0)==0x1f0) + { + test.Printf(_L(" TRUNCATE F4 to zero")); + r=TheFile4.SetSize(0); + TestRet(r); + sum4=0L; + } + if ((Math::Rand(seedL)&0x70)==0x70) + { + sum3=Math::Rand(seedL)&0x3fff; + test.Printf(_L(" SET SIZE F3 to %u"),sum3); + r=TheFile3.SetSize(sum3); + TestRet(r); + TInt pos=0; + r=TheFile3.Seek(ESeekEnd,pos); + TestRet(r); + test(pos==sum3); + } + if ((Math::Rand(seedL)&0x70)==0x70) + { + sum4=Math::Rand(seedL)&0x3fff; + test.Printf(_L(" SET SIZE F4 to %u"),sum4); + r=TheFile4.SetSize(sum4); + TestRet(r); + TInt pos=0; + r=TheFile4.Seek(ESeekEnd,pos); + TestRet(r); + test(pos==sum4); + } + if ((Math::Rand(seedL)&0x70)==0x70) + { + test.Printf(_L(" CHECKING F1")); + TInt pos=0; + r=TheFile1.Seek(ESeekStart,pos); + TestRet(r); + test(pos==0); + TInt sum=0; + buf.Fill('A',0x200); + do + { + r=TheFile1.Read(chkPat); + TestRet(r); + if (chkPat.Length()