kerneltest/f32test/math/t_gen32.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/math/t_gen32.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,313 @@
+// Copyright (c) 1996-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\math\t_gen32.cpp
+// Generates files to be used in testing whether arithmetic in TReal32 gives
+// exactly the same results using the MSDEV complier as on the rack.
+// 
+//
+
+#include <f32file.h>
+#include <e32svr.h>
+#include "t_math.h"
+#include "../server/t_server.h"
+
+#if defined(__VC32__)
+//
+// Some symbols generated by the VC++ compiler for floating point stuff.
+//
+extern "C" {
+GLDEF_D TInt _adj_fdiv_m32;
+}
+#endif
+
+GLDEF_D RTest test(_L("T_GEN32"));
+
+LOCAL_D	RFile f;
+LOCAL_D const TFileName fileName32 = _L("T_REAL32.H");
+
+LOCAL_D const TFileName pathName = _L("C:\\E32-MATH\\");
+LOCAL_D	TBuf<0x100> buf;
+LOCAL_D TBuf8<0x100> buf8;
+
+// Data for tests from T_R32DTA.cpp 
+GLREF_D TReal32 addInput[];
+GLREF_D TReal32 subInput[];
+GLREF_D TReal32 multInput[];
+GLREF_D TReal32 divInput[];
+//GLREF_D TApprox32 subApprox[];
+GLREF_D TReal32 unaryInput[];
+GLREF_D TReal32 incDecInput[];
+GLREF_D TInt sizeAdd;
+GLREF_D TInt sizeSub;
+GLREF_D TInt sizeMult;
+GLREF_D TInt sizeDiv;
+//GLREF_D TInt sizeSubApprox;
+GLREF_D TInt sizeUnary;
+GLREF_D TInt sizeIncDec;
+
+LOCAL_C void appendStart()
+	{
+	f.Write(_L8("// Generated by \\E32\\TMATH\\T_GEN32.MAK\n\n"));
+	f.Write(_L8("#include <e32std.h>\n\n"));
+	f.Write(_L8("#if defined(__WINS__)\n#include \"t_vals.hwg\"\n"));
+	f.Write(_L8("#else\n#include \"t_vals.hag\"\n#endif\n"));
+	}
+
+LOCAL_C void appendArrayName32(TPtrC aName)
+	{
+	buf=_L("");
+	buf.AppendFormat(_L("const TInt32x %S[] = \n{\n"),&aName);
+	buf8.Copy(buf);
+	f.Write(buf8);
+	}
+
+LOCAL_C void appendValue32(TReal32* aVal)
+	{
+	buf=_L("");
+	buf.AppendFormat(_L("	TInt32x(0x%x),\n"),*(TUint32*)aVal);
+	buf8.Copy(buf);
+	f.Write(buf8);
+	}
+
+LOCAL_C void appendArrayTerm()
+	{
+	buf8=_L8("};\n\n");
+	f.Write(buf8);
+	}
+
+LOCAL_C void createAddArray()
+//
+// Writes an array of results of additions to the header file
+//
+	{
+	TInt ii;
+	TReal32 ff;
+
+	appendArrayName32(_L("addArray"));
+	for (ii=0; ii<sizeAdd-1; ii++)
+		{
+		ff=addInput[ii]+addInput[ii+1];
+		appendValue32(&ff);
+		}
+	appendArrayTerm();
+	}
+
+LOCAL_C void createSubArray()
+//
+// Writes an array of results of subtractions to the header file
+//
+	{
+	TInt ii;
+	TReal32 ff;
+
+	appendArrayName32(_L("subArray"));
+	for (ii=0; ii<sizeSub-1; ii++)
+		{
+		ff=subInput[ii]-subInput[ii+1];
+		appendValue32(&ff);
+		}
+	appendArrayTerm();
+
+	/*
+	appendArrayName32(_L("subApproxArray"));
+	for (ii=0; ii<sizeSubApprox; ii++)
+		{
+		ff=subApprox[ii].f-subApprox[ii].g;
+		appendValue32(&ff);
+		}
+	appendArrayTerm();
+	*/
+	} 
+
+LOCAL_C void createMultArray()
+//
+// Writes an array of results of multiplications to the header file
+//
+	{
+	TInt ii;
+	TReal32 ff;
+
+	appendArrayName32(_L("multArray"));
+	for (ii=0; ii<sizeMult-1; ii++)
+		{
+		ff=multInput[ii]*multInput[ii+1];
+		appendValue32(&ff);
+		}
+	appendArrayTerm();
+	} 
+
+LOCAL_C void createDivArray()
+//
+// Writes an array of results of divisions to the header file
+//
+	{
+	TInt ii;
+	TReal32 ff;
+
+	appendArrayName32(_L("divArray"));
+	for (ii=0; ii<sizeDiv-1; ii++)
+		{
+		if (divInput[ii+1]!=0)
+			{
+			ff=divInput[ii]/divInput[ii+1];
+			appendValue32(&ff);
+			}
+		}
+	appendArrayTerm();
+	} 
+
+LOCAL_C void createUnaryArray()
+//
+// Writes an array of results of unary operations to the header file
+//
+	{
+	TReal32 f;
+
+	appendArrayName32(_L("unaryArray"));
+	for (TInt ii=0; ii<sizeUnary; ii++)
+		{
+		f=-unaryInput[ii];
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+	} 
+
+LOCAL_C void createIncDecArrays()
+//
+// Writes an array of results of pre and post increment and decrement operations to the
+// header file
+//
+	{
+	TInt ii;
+	TReal32 f;
+
+	appendArrayName32(_L("preIncArray1"));
+	for (ii=0; ii<sizeIncDec; ii++)
+		{
+		f=incDecInput[ii];
+		++f;
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+
+	appendArrayName32(_L("preIncArray2"));
+	for (ii=0; ii<sizeIncDec; ii++)
+		{
+		f=incDecInput[ii];
+		++f;
+		++f;
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+
+	appendArrayName32(_L("preDecArray1"));
+	for (ii=0; ii<sizeIncDec; ii++)
+		{
+		f=incDecInput[ii];
+		--f;
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+
+	appendArrayName32(_L("preDecArray2"));
+	for (ii=0; ii<sizeIncDec; ii++)
+		{
+		f=incDecInput[ii];
+		--f;
+		--f;
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+
+	appendArrayName32(_L("postIncArray1"));
+	for (ii=0; ii<sizeIncDec; ii++)
+		{
+		f=incDecInput[ii];
+		f++;
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+
+	appendArrayName32(_L("postIncArray2"));
+	for (ii=0; ii<sizeIncDec; ii++)
+		{
+		f=incDecInput[ii];
+		f++;
+		f++;
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+
+	appendArrayName32(_L("postDecArray1"));
+	for (ii=0; ii<sizeIncDec; ii++)
+		{
+		f=incDecInput[ii];
+		f--;
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+	
+	appendArrayName32(_L("postDecArray2"));
+	for (ii=0; ii<sizeIncDec; ii++)
+		{
+		f=incDecInput[ii];
+		f--;
+		f--;
+		appendValue32(&f);
+		}
+	appendArrayTerm();
+	} 
+
+LOCAL_C void createArrays()
+//
+// Create and append to header file all arrays required for T_R32.CPP tests
+//
+	{
+	createAddArray();
+	createSubArray();
+	createMultArray();
+	createDivArray();
+	createUnaryArray();
+	createIncDecArrays();
+	}
+
+GLDEF_C void CallTestsL(void)
+//
+// Generate TReal32s (and special values if required) and write to header files
+//
+    {
+
+	test.Title();
+
+	TFileName msg;
+	msg=_L("Generating Maths constants to header files:\n ");
+	msg+=pathName;
+	msg+=fileName32;
+	test.Start(msg);
+
+	test.Next(_L("Making directory"));
+	TInt r=TheFs.MkDirAll(pathName);
+	test(r==KErrNone || r==KErrAlreadyExists);
+	test(TheFs.SetSessionPath(pathName)==KErrNone);
+
+	test(f.Replace(TheFs,fileName32,EFileWrite)==KErrNone);
+	test.Next(_L("Generating TReal32s"));
+	appendStart();
+	createArrays();
+	f.Close();
+
+	test.End();
+
+	return;
+    }