sl@0: // Copyright (c) 1995-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: // f32test\server\b_rand.cpp sl@0: // sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include "t_server.h" sl@0: sl@0: const TInt64 KInitialSeedL=24; sl@0: const TInt KInitialSeed5=42; sl@0: const TInt KMaxStream=0x1000; sl@0: sl@0: class RStream sl@0: { sl@0: public: sl@0: RStream(); sl@0: void Set(RFile& aFile); sl@0: TInt Read(TDes8& aDes); sl@0: private: sl@0: const TText8* iNext; sl@0: const TText8* iEnd; sl@0: TBool iEOF; sl@0: RFile iFile; sl@0: TBuf8 iStream; sl@0: }; sl@0: sl@0: GLDEF_D RTest test(_L("B_RAND")); sl@0: LOCAL_D RFile TheFile1; sl@0: LOCAL_D RFile TheFile2; sl@0: LOCAL_D RFile TheFile3; sl@0: LOCAL_D RFile TheFile4; sl@0: LOCAL_D RFile TheFile5; sl@0: LOCAL_D TFileName fBuf; sl@0: LOCAL_D TFileName nameBuf1; sl@0: LOCAL_D TFileName nameBuf2; sl@0: LOCAL_D TFileName nameBuf3; sl@0: LOCAL_D TFileName nameBuf4; sl@0: LOCAL_D TFileName nameBuf5; sl@0: LOCAL_D TBuf8<0x200> chkPat; sl@0: LOCAL_D TBuf8<0x200> testPat2; sl@0: LOCAL_D TBuf8<0x400> testPat3; sl@0: LOCAL_D TBuf8<0x400> testPat4; sl@0: LOCAL_D TBuf8<0x40> testPat5; sl@0: LOCAL_D TBuf8<0x400> buf; sl@0: LOCAL_D RStream sBuf; sl@0: LOCAL_D TPtrC testDir(_S("\\F32-TST\\")); sl@0: sl@0: LOCAL_C void TestRet(TInt aRet) sl@0: // sl@0: // Display error value if aRet!=KErrNone sl@0: // sl@0: { sl@0: sl@0: if (aRet==KErrNone) sl@0: return; sl@0: test.Printf(_L("Error: %d\n"),aRet); sl@0: test(EFalse); sl@0: } sl@0: sl@0: #if defined(__SLOW_TEST__) sl@0: LOCAL_C void CheckFile(const RFile& aFile,const TChar aChar) sl@0: // sl@0: // Check that aFile only contains aChar and '\n' characters sl@0: // sl@0: { sl@0: sl@0: TBuf8<0x400> buf(0x400); sl@0: TInt pos=0; sl@0: TInt r=aFile.Seek(ESeekStart,pos); sl@0: TestRet(r); sl@0: while(buf.Length()==buf.MaxLength()) sl@0: { sl@0: r=aFile.Read(buf); sl@0: TestRet(r); sl@0: TInt len=buf.Length(); sl@0: while(len--) sl@0: test(buf[len]=='\n' || aChar==buf[len]); sl@0: } sl@0: } sl@0: #else sl@0: LOCAL_C void CheckFile(const RFile& /*aFile*/,const TChar /*aChar*/) sl@0: { sl@0: } sl@0: #endif sl@0: sl@0: LOCAL_C void CheckFile1() sl@0: {CheckFile(TheFile1,'A');} sl@0: LOCAL_C void CheckFile2() sl@0: {CheckFile(TheFile2,'B');} sl@0: sl@0: RStream::RStream() sl@0: // sl@0: // Constructor. sl@0: // sl@0: { sl@0: } sl@0: sl@0: void RStream::Set(RFile& aFile) sl@0: // sl@0: // Initialize the stream on a file. sl@0: // sl@0: { sl@0: sl@0: iEOF=EFalse; sl@0: iFile=aFile; sl@0: iStream.Zero(); sl@0: iNext=iStream.Ptr(); sl@0: iEnd=iNext; sl@0: } sl@0: sl@0: TInt RStream::Read(TDes8& aDes) sl@0: // sl@0: // Read from the stream. sl@0: // sl@0: { sl@0: sl@0: TText8* pD=(TText8*)aDes.Ptr(); sl@0: TInt len=aDes.MaxLength(); sl@0: TInt newLen=0; sl@0: while (newLen=iEnd) sl@0: { sl@0: if (iEOF) sl@0: { sl@0: if (newLen==0) sl@0: return(KErrEof); sl@0: aDes.SetLength(newLen); sl@0: return(KErrNone); sl@0: } sl@0: TInt r=iFile.Read(iStream); sl@0: if (r!=KErrNone) sl@0: return(r); sl@0: if (iStream.Length()!=iStream.MaxLength()) sl@0: iEOF=ETrue; sl@0: iNext=iStream.Ptr(); sl@0: iEnd=iNext+iStream.Length(); sl@0: continue; sl@0: } sl@0: TUint c=(*iNext++); sl@0: if (c=='\n') sl@0: { sl@0: aDes.SetLength(newLen); sl@0: return(KErrNone); sl@0: } sl@0: *pD++=(TText8)c; sl@0: newLen++; sl@0: } sl@0: return(KErrTooBig); sl@0: } sl@0: sl@0: sl@0: GLDEF_C void CallTestsL(void) sl@0: // sl@0: // Do tests relative to session path sl@0: // sl@0: { sl@0: sl@0: TTime timerC; sl@0: timerC.HomeTime(); sl@0: sl@0: test.Next(_L("Make test directory")); sl@0: // sl@0: TInt n_times=400; sl@0: testPat2.Fill('B',testPat2.MaxLength()); sl@0: testPat3.Fill('C',testPat3.MaxLength()); sl@0: testPat4.Fill('D',testPat4.MaxLength()); sl@0: // sl@0: TInt r=TheFile1.Temp(TheFs,testDir,nameBuf1,EFileStream|EFileWrite); sl@0: TestRet(r); sl@0: test.Printf(_L("Created1: %S\n"),&nameBuf1); sl@0: TInt sum1=0; sl@0: // sl@0: r=TheFile2.Temp(TheFs,testDir,nameBuf2,EFileStreamText|EFileWrite); sl@0: TestRet(r); sl@0: test.Printf(_L("Created2: %S\n"),&nameBuf2); sl@0: TInt sum2=0; sl@0: // sl@0: r=TheFile3.Temp(TheFs,testDir,nameBuf3,EFileStream|EFileWrite); sl@0: TestRet(r); sl@0: test.Printf(_L("Created3: %S\n"),&nameBuf3); sl@0: TInt sum3=0; sl@0: // sl@0: r=TheFile4.Temp(TheFs,testDir,nameBuf4,EFileStream|EFileWrite); sl@0: TestRet(r); sl@0: test.Printf(_L("Created4: %S\n"),&nameBuf4); sl@0: TInt sum4=0; sl@0: // sl@0: r=TheFile5.Temp(TheFs,testDir,nameBuf5,EFileStreamText|EFileWrite); sl@0: TestRet(r); sl@0: test.Printf(_L("Created5: %S\n"),&nameBuf5); sl@0: TInt sum5=0; sl@0: TheFile5.Close(); sl@0: // sl@0: TInt64 seed5=KInitialSeed5; sl@0: TInt64 seedL=KInitialSeedL; sl@0: TBuf<0x100> pBuf; sl@0: for (TInt rep=0;repF1 ")); // Write 1 byte to file1 sl@0: TPtrC8 pA=_L8("A"); sl@0: r=TheFile1.Write(pA); sl@0: TestRet(r); sl@0: CheckFile1(); sl@0: sl@0: CheckFile2(); sl@0: TInt len=(Math::Rand(seedL)&0xff); // 0 to 255 sl@0: sum2+=len; sl@0: pBuf.AppendFormat(_L("W%03u->F2 "),len); // Write len bytes to file2 sl@0: r=TheFile2.Write(testPat2,len); sl@0: TestRet(r); sl@0: r=TheFile2.Write(_L8("\n")); sl@0: TestRet(r); sl@0: CheckFile2(); sl@0: sl@0: if (Math::Rand(seedL)&0x10) sl@0: { sl@0: CheckFile2(); sl@0: len=(Math::Rand(seedL)&0x2ff); sl@0: sum3+=len; sl@0: pBuf.AppendFormat(_L("W%03u->F3 "),len); // Write len bytes to file3 sl@0: r=TheFile3.Write(testPat3,len); sl@0: TestRet(r); sl@0: CheckFile2(); sl@0: } sl@0: sl@0: if (Math::Rand(seedL)&0x10) sl@0: { sl@0: len=(Math::Rand(seedL)&0x3ff); sl@0: sum4+=len; sl@0: pBuf.AppendFormat(_L("W%04u->F4 "),len); // Write len bytes to file4 sl@0: r=TheFile4.Write(testPat4,len); sl@0: TestRet(r); sl@0: // CheckFile4(); sl@0: } sl@0: sl@0: if ((Math::Rand(seedL)&0x70)==0x70) sl@0: { sl@0: r=TheFile5.Open(TheFs,nameBuf5,EFileStreamText|EFileWrite); sl@0: TestRet(r); sl@0: TInt pos=0; sl@0: r=TheFile5.Seek(ESeekEnd,pos); sl@0: TestRet(r); sl@0: testPat5.Format(_L8("%8x\n"),Math::Rand(seed5)); sl@0: pBuf.Append(_L("W8->F5")); // Write 8 bytes to file5 sl@0: r=TheFile5.Write(testPat5); sl@0: TestRet(r); sl@0: TheFile5.Close(); sl@0: sum5+=8; sl@0: } sl@0: test.Printf(pBuf); sl@0: sl@0: if ((Math::Rand(seedL)&0xf0)==0xf0) sl@0: { sl@0: test.Printf(_L(" DELETE F3")); sl@0: TheFile3.Close(); sl@0: r=TheFs.Delete(nameBuf3); sl@0: TestRet(r); sl@0: r=TheFile3.Temp(TheFs,testDir,nameBuf3,EFileStream|EFileWrite); sl@0: TestRet(r); sl@0: sum3=0L; sl@0: } sl@0: if ((Math::Rand(seedL)&0xf0)==0xf0) sl@0: { sl@0: test.Printf(_L(" DELETE F4")); sl@0: TheFile4.Close(); sl@0: r=TheFs.Delete(nameBuf4); sl@0: TestRet(r); sl@0: r=TheFile4.Temp(TheFs,testDir,nameBuf4,EFileStream|EFileWrite); sl@0: TestRet(r); sl@0: sum4=0L; sl@0: } sl@0: if ((Math::Rand(seedL)&0x1f0)==0x1f0) sl@0: { sl@0: test.Printf(_L(" REPLACE F3")); sl@0: TheFile3.Close(); sl@0: TestRet(r); sl@0: r=TheFile3.Replace(TheFs,nameBuf3,EFileStream|EFileWrite); sl@0: TestRet(r); sl@0: sum3=0L; sl@0: } sl@0: if ((Math::Rand(seedL)&0x1f0)==0x1f0) sl@0: { sl@0: test.Printf(_L(" REPLACE F4")); sl@0: TheFile4.Close(); sl@0: r=TheFile4.Replace(TheFs,nameBuf4,EFileStream|EFileWrite); sl@0: TestRet(r); sl@0: sum4=0L; sl@0: } sl@0: if ((Math::Rand(seedL)&0x1f0)==0x1f0) sl@0: { sl@0: test.Printf(_L(" TRUNCATE F3 to zero")); sl@0: r=TheFile3.SetSize(0); sl@0: TestRet(r); sl@0: sum3=0L; sl@0: } sl@0: if ((Math::Rand(seedL)&0x1f0)==0x1f0) sl@0: { sl@0: test.Printf(_L(" TRUNCATE F4 to zero")); sl@0: r=TheFile4.SetSize(0); sl@0: TestRet(r); sl@0: sum4=0L; sl@0: } sl@0: if ((Math::Rand(seedL)&0x70)==0x70) sl@0: { sl@0: sum3=Math::Rand(seedL)&0x3fff; sl@0: test.Printf(_L(" SET SIZE F3 to %u"),sum3); sl@0: r=TheFile3.SetSize(sum3); sl@0: TestRet(r); sl@0: TInt pos=0; sl@0: r=TheFile3.Seek(ESeekEnd,pos); sl@0: TestRet(r); sl@0: test(pos==sum3); sl@0: } sl@0: if ((Math::Rand(seedL)&0x70)==0x70) sl@0: { sl@0: sum4=Math::Rand(seedL)&0x3fff; sl@0: test.Printf(_L(" SET SIZE F4 to %u"),sum4); sl@0: r=TheFile4.SetSize(sum4); sl@0: TestRet(r); sl@0: TInt pos=0; sl@0: r=TheFile4.Seek(ESeekEnd,pos); sl@0: TestRet(r); sl@0: test(pos==sum4); sl@0: } sl@0: if ((Math::Rand(seedL)&0x70)==0x70) sl@0: { sl@0: test.Printf(_L(" CHECKING F1")); sl@0: TInt pos=0; sl@0: r=TheFile1.Seek(ESeekStart,pos); sl@0: TestRet(r); sl@0: test(pos==0); sl@0: TInt sum=0; sl@0: buf.Fill('A',0x200); sl@0: do sl@0: { sl@0: r=TheFile1.Read(chkPat); sl@0: TestRet(r); sl@0: if (chkPat.Length()