[Piglit] [PATCH 4/6] Removed Glean floating point exceptions test.

Laura Ekstrand laura at jlekstrand.net
Mon Oct 13 14:21:37 PDT 2014


---
 tests/glean/CMakeLists.gl.txt |   1 -
 tests/glean/tfpexceptions.cpp | 601 ------------------------------------------
 tests/glean/tfpexceptions.h   |  78 ------
 3 files changed, 680 deletions(-)
 delete mode 100644 tests/glean/tfpexceptions.cpp
 delete mode 100644 tests/glean/tfpexceptions.h

diff --git a/tests/glean/CMakeLists.gl.txt b/tests/glean/CMakeLists.gl.txt
index 3428a50..996558d 100644
--- a/tests/glean/CMakeLists.gl.txt
+++ b/tests/glean/CMakeLists.gl.txt
@@ -31,7 +31,6 @@ piglit_add_executable (glean
 	tbinding.cpp
 	test.cpp
 	tfbo.cpp
-	tfpexceptions.cpp
 	tfragprog1.cpp
 	tglsl1.cpp
 	tlogicop.cpp
diff --git a/tests/glean/tfpexceptions.cpp b/tests/glean/tfpexceptions.cpp
deleted file mode 100644
index 09c6329..0000000
--- a/tests/glean/tfpexceptions.cpp
+++ /dev/null
@@ -1,601 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-// 
-// Copyright (C) 1999  Allen Akin   All Rights Reserved.
-// 
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the
-// Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL ALLEN AKIN BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-// 
-// END_COPYRIGHT
-
-// Authors: Brian Paul, Keith Whitwell
-
-#include "tfpexceptions.h"
-#include <cmath>
-
-#define INCLUDE_FPU_CONTROL 0
-#if INCLUDE_FPU_CONTROL
-#include <fpu_control.h>
-#endif
-
-
-namespace GLEAN {
-
-
-// This might be useful at some point
-void
-FPExceptionsTest::enableExceptions(bool enable)
-{
-#if INCLUDE_FPU_CONTROL
-   const fpu_control_t bits =
-      _FPU_MASK_IM |
-      _FPU_MASK_DM |
-      _FPU_MASK_ZM |
-      _FPU_MASK_OM |
-      _FPU_MASK_UM;
-
-   if (enable) {
-      /* generate FP exceptions */
-      fpu_control_t mask;
-      _FPU_GETCW(mask);
-      mask &= ~bits;
-      _FPU_SETCW(mask);
-   }
-   else {
-      fpu_control_t mask;
-      _FPU_GETCW(mask);
-      mask |= bits;
-      _FPU_SETCW(mask);
-   }
-#else
-   (void) enable;
-#endif
-}
-
-
-
-// XXX any endian issues with this???
-// Works on x86 / little endian
-union fi {
-	float f;
-	struct {
-		unsigned mantissa:23;
-		unsigned exponent:8;
-		unsigned sign:1;
-	} bits;
-	unsigned ui;
-};
-
-
-static void
-make_float(float *dest, unsigned sign, unsigned exponent, unsigned mantissa)
-{
-	union fi *destfi = (union fi *) dest;
-	destfi->bits.sign = sign;
-	destfi->bits.exponent = exponent;
-	destfi->bits.mantissa = mantissa;
-}
-
-static void
-make_denorm_float(float *dest, int sign, int mantissa)
-{
-	make_float(dest, sign, 0, mantissa);
-}
-
-static void
-make_pos_inf_float(float *dest)
-{
-	make_float(dest, 0, 255, 0); // or HUGE_VALF?
-}
-
-static void
-make_neg_inf_float(float *dest)
-{
-	make_float(dest, 1, 255, 0); // or -HUGE_VALF?
-}
-
-static void
-make_signaling_nan_float(float *dest)
-{
-	make_float(dest, 0, 255, 1);
-}
-
-static void
-make_quiet_nan_float(float *dest)
-{
-	make_float(dest, 0, 255, 1 << 22);
-}
-
-static void
-make_denorm_double(double * /*dest*/, int /*sign*/, int /*mantissa*/)
-{
-	// XXX to do
-}
-
-static void
-make_pos_inf_double(double *dest)
-{
-	*dest = HUGE_VAL;
-}
-
-static void
-make_neg_inf_double(double *dest)
-{
-	*dest = -HUGE_VAL;
-}
-
-static void
-make_signaling_nan_double(double * /*dest*/)
-{
-	// XXX to do
-}
-
-static void
-make_quiet_nan_double(double * /*dest*/)
-{
-	// XXX to do
-}
-
-
-#if 0
-static void
-print_float(float f)
-{
-   union fi fi, fi2;
-   int iexp, imnt, isgn;
-
-   fi.f = f;
-   printf("float %f (%e)\n\tuint 0x%x\n\tsign %d exponent %d mantissa 0x%x\n",
-	  fi.f, fi.f, fi.ui, fi.bits.sign, fi.bits.exponent, fi.bits.mantissa);
-
-   switch (fi.bits.exponent) {
-   case 0:
-      if (fi.bits.mantissa == 0)
-	 printf("\t%szero\n", fi.bits.sign ? "-" : "+");
-      else {
-	 printf("\tdenormalized float\n");
-
-	 iexp = -126 - 23;	/* -149 */
-	 imnt = (int)fi.bits.mantissa;
-	 isgn = fi.bits.sign ? -1 : 1;
-	 fi2.f = isgn * imnt * ldexp(1.0, iexp);
-      
-	 printf("\trecombining: %d * 0x%x * 2.0^%d  == %f (%e)\n",
-		isgn, imnt, iexp, fi2.f, fi2.f);
-	 printf("\trecombined: sign %d exponent %d mantissa 0x%x\n",
-		fi2.bits.sign, fi2.bits.exponent, fi2.bits.mantissa);      
-      }
-      break;
-
-   case 255:
-      if (fi.bits.mantissa & (1<<22)) 
-	 printf("\tQNaN (Quiet NaN/indeterminate value)\n");
-      else if (fi.bits.mantissa)
-	 printf("\tSNaN (Signalling NaN/invalid value)\n");
-      else 
-	 printf("\t%sinf\n", fi.bits.sign ? "-" : "+");
-      break;
-
-   default:
-      iexp = fi.bits.exponent - (127 + 23);
-      imnt = (1<<23) + (int)fi.bits.mantissa;
-      isgn = fi.bits.sign ? -1 : 1;
-      fi2.f = isgn * imnt * ldexp(1.0, iexp);
-      
-      printf("\trecombining: %d * 0x%x * 2.0^%d  == %f\n",
-	     isgn, imnt, iexp, fi2.f);
-      
-      printf("\trecombined: sign %d exponent %d mantissa 0x%x\n",
-	     fi2.bits.sign, fi2.bits.exponent, fi2.bits.mantissa);
-      break;
-   }
-
-   /* Let's look and see what would happen if we interpret all these
-    * cases as normal floats:
-    */
-   iexp = fi.bits.exponent - (127 + 23);
-   imnt = (1<<23) + (int)fi.bits.mantissa;
-   isgn = fi.bits.sign ? -1 : 1;
-   fi2.f = isgn * imnt * ldexp(1.0, iexp);
-
-   printf("\tvalue if treated as normalized: %f (%e)\n",
-	  fi2.f, fi2.f);
-}
-
-
-/* Examine some interesting floats
- */
-int main() 
-{
-   float f;
-   int i;
-
-   for (i = -3; i < 10; i++) {
-      printf("%d:\n  ", i);
-      print_float(ldexp(1.0, i));
-   }
-   
-   for (f = -4 ; f < 4; f += 1)
-      print_float(f);
-
-   for (f = -.01 ; f < .01; f += .002)
-      print_float(f);
-
-   f = 1.0/0;
-   print_float(f);
-
-   f += 1.0;
-   print_float(f);
-
-   /* Explicitly make a denormal - I've no idea how to create these
-    * with regular calculations:
-    */
-   make_float(&f, 0, 0, 0x1000);
-   print_float(f);
-
-   /* It seems you can just specify them!
-    */
-   f = 5.739719e-42;
-   print_float(f);
-
-   /* A little, non-denormalized float
-    */
-   make_float(&f, 0, 1, 0x1);
-   print_float(f);
-
-   /* A negative little, non-denormalized float
-    */
-   make_float(&f, 1, 1, 0x1);
-   print_float(f);
-
-   /* A big float
-    */
-   make_float(&f, 0, 254, ~0);
-   print_float(f);
-
-   make_float(&f, 1, 254, ~0);
-   print_float(f);
-
-   /* Littlest and biggest denormals:
-    */
-   make_float(&f, 0, 0, 1);
-   print_float(f);
-   make_float(&f, 0, 0, ~0);
-   print_float(f);
-
-
-   make_float(&f, 1, 0, 1);
-   print_float(f);
-   make_float(&f, 1, 0, ~0);
-   print_float(f);
-
-}
-#endif
-      
-
-bool
-FPExceptionsTest::testVertices(Mode m)
-{
-	float v[3][4];
-	// nice coords
-	for (int i = 0; i < 3; i++) {
-		v[i][0] = 0.0;
-		v[i][1] = 0.0;
-		v[i][2] = 0.0;
-		v[i][3] = 1.0;
-	}
-
-	// set problematic values
-	switch (m) {
-	case MODE_INFINITY:
-		make_pos_inf_float(&v[1][0]);
-		make_neg_inf_float(&v[2][1]);
-		break;
-	case MODE_NAN:
-		make_signaling_nan_float(&v[1][0]);
-		make_quiet_nan_float(&v[2][1]);
-		break;
-	case MODE_DIVZERO:
-		v[0][3] = 0.0;
-		v[1][3] = 0.0;
-		v[2][3] = 0.0;
-		break;
-	case MODE_DENORM:
-		make_denorm_float(&v[0][0], 0, 1);
-		make_denorm_float(&v[1][1], 1, 1);
-		break;
-	default:
-		; // nothing
-	}
-
-	// vertex positions
-	glBegin(GL_POLYGON);
-	glVertex4fv(v[0]);
-	glVertex4fv(v[1]);
-	glVertex4fv(v[2]);
-	glEnd();
-
-	// colors
-	glBegin(GL_POLYGON);
-	glColor4fv(v[0]);  glVertex2f(-1, -1);
-	glColor4fv(v[1]);  glVertex2f( 1, -1);
-	glColor4fv(v[2]);  glVertex2f( 0,  1);
-	glEnd();
-
-	// normals
-	glEnable(GL_LIGHTING);
-	glBegin(GL_POLYGON);
-	glNormal3fv(v[0]);  glVertex2f(-1, -1);
-	glNormal3fv(v[1]);  glVertex2f( 1, -1);
-	glNormal3fv(v[2]);  glVertex2f( 0,  1);
-	glEnd();
-	glDisable(GL_LIGHTING);
-
-	// texcoords
-	glEnable(GL_TEXTURE_2D);
-	glBegin(GL_POLYGON);
-	glTexCoord4fv(v[0]);  glVertex2f(-1, -1);
-	glTexCoord4fv(v[1]);  glVertex2f( 1, -1);
-	glTexCoord4fv(v[2]);  glVertex2f( 0,  1);
-	glEnd();
-	glDisable(GL_TEXTURE_2D);
-
-	return true;
-}
-
-
-bool
-FPExceptionsTest::testTransformation(Mode m)
-{
-	float mat[16];
-
-	// identity
-	for (int i = 0; i < 15; i++)
-		mat[i] = 0.0;
-	mat[0] = mat[5] = mat[10] = mat[15] = 1.0;
-
-	// set problematic values
-	switch (m) {
-	case MODE_INFINITY:
-		make_pos_inf_float(&mat[0]);   // X scale
-		make_neg_inf_float(&mat[13]);  // Y translate
-		break;
-	case MODE_NAN:
-		make_signaling_nan_float(&mat[0]);   // X scale
-		make_quiet_nan_float(&mat[13]);  // Y translate
-		break;
-	case MODE_DIVZERO:
-		// all zero matrix
-		mat[0] = mat[5] = mat[10] = mat[15] = 0.0;
-		break;
-	case MODE_DENORM:
-		make_denorm_float(&mat[0], 0, 1);
-		make_denorm_float(&mat[13], 1, 1);
-		break;
-	default:
-		; // nothing
-	}
-
-	glMatrixMode(GL_MODELVIEW);
-	glPushMatrix();
-	glLoadMatrixf(mat);
-
-	// vertex positions
-	glBegin(GL_POLYGON);
-	glVertex2f(-1, -1);
-	glVertex2f( 1, -1);
-	glVertex2f( 0,  1);
-	glEnd();
-
-	glPopMatrix();
-
-	return true;
-}
-
-
-bool
-FPExceptionsTest::testClipping(Mode m)
-{
-	double plane[4];
-
-	// start w/ nice values
-	plane[0] = plane[1] = plane[2] = plane[3] = 0.0;
-
-	// set problematic values
-	switch (m) {
-	case MODE_INFINITY:
-		make_pos_inf_double(&plane[0]);
-		make_neg_inf_double(&plane[3]);
-		break;
-	case MODE_NAN:
-		make_signaling_nan_double(&plane[0]);
-		make_quiet_nan_double(&plane[3]);
-		break;
-	case MODE_DIVZERO:
-		// nothing		
-		break;
-	case MODE_DENORM:
-		make_denorm_double(&plane[0], 0, 1);
-		make_denorm_double(&plane[3], 1, 1);
-		break;
-	case MODE_OVERFLOW:
-		plane[0] = 1.0e300;
-		plane[3] = 1.0e-300;
-		break;
-	default:
-		; // nothing
-	}
-
-	glClipPlane(GL_CLIP_PLANE0, plane);
-	glEnable(GL_CLIP_PLANE0);
-
-	// vertex positions
-	glBegin(GL_POLYGON);
-	glVertex2f(-1, -1);
-	glVertex2f( 1, -1);
-	glVertex2f( 0,  1);
-	glEnd();
-
-	glDisable(GL_CLIP_PLANE0);
-
-	return true;
-}
-
-
-// pass large doubles to OpenGL and see what happens when converted to float.
-bool
-FPExceptionsTest::testOverflow(void)
-{
-	GLdouble v[3][4];
-	for (int i = 0; i < 3; i++) {
-		v[i][0] = 0.0;
-		v[i][1] = 0.0;
-		v[i][2] = 0.0;
-		v[i][3] = 1.0;
-	}
-	v[0][0] = 1.0e300;
-	v[0][1] = -1.0e300;
-	v[1][0] = 1.0e-300;
-	v[1][1] = 1.0e-300;
-
-	GLdouble mat[16];
-	for (int i = 0; i < 15; i++)
-		mat[i] = 0.0;
-	mat[0] = mat[5] = mat[10] = mat[15] = 1.0e100;
-
-	glMatrixMode(GL_MODELVIEW);
-	glPushMatrix();
-	glLoadMatrixd(mat);
-
-	glBegin(GL_POLYGON);
-	glVertex4dv(v[0]);
-	glVertex4dv(v[1]);
-	glVertex4dv(v[2]);
-	glEnd();
-
-	glPopMatrix();
-
-	return true;
-}
-
-
-
-void
-FPExceptionsTest::setup(void)
-{
-	// Simple texture map
-	static const GLfloat texImage[2][2][3] = {
-		{ {1, 1, 1}, {0, 0, 0} },
-		{ {0, 0, 0}, {1, 1, 1} }
-	};
-
-	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0,
-		     GL_RGB, GL_FLOAT, texImage);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-
-	// simple lighting
-	glEnable(GL_LIGHT0);
-	glEnable(GL_LIGHT1);
-	glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
-}
-
-
-void
-FPExceptionsTest::reportPassFail(MultiTestResult &r,
-				 bool pass, const char *msg) const
-{
-	if (pass) {
-		if (env->options.verbosity)
-			env->log << name << " PASS: " << msg << " test\n";
-		r.numPassed++;
-	}
-	else {
-		if (env->options.verbosity)
-			env->log << name << " FAILURE: " << msg << " test\n";
-		r.numFailed++;
-	}
-}
-
-void
-FPExceptionsTest::runOne(MultiTestResult &r, Window &w)
-{
-	bool p;
-
-	(void) w;
-
-	p = testVertices(MODE_INFINITY);
-	reportPassFail(r, p, "Infinite value vertex");
-
-	p = testVertices(MODE_NAN);
-	reportPassFail(r, p, "NaN value vertex");
-
-	p = testVertices(MODE_DIVZERO);
-	reportPassFail(r, p, "Divide by zero vertex");
-
-	p = testVertices(MODE_DENORM);
-	reportPassFail(r, p, "Denorm vertex");
-
-
-	p = testTransformation(MODE_INFINITY);
-	reportPassFail(r, p, "Infinite matrix transform");
-
-	p = testTransformation(MODE_NAN);
-	reportPassFail(r, p, "NaN matrix transform");
-
-	p = testTransformation(MODE_DIVZERO);
-	reportPassFail(r, p, "Zero matrix transform");
-
-	p = testTransformation(MODE_DENORM);
-	reportPassFail(r, p, "Denorm matrix transform");
-
-
-	p = testClipping(MODE_INFINITY);
-	reportPassFail(r, p, "Infinite clip plane");
-
-	p = testClipping(MODE_NAN);
-	reportPassFail(r, p, "NaN clip plane");
-
-	p = testClipping(MODE_DIVZERO);
-	reportPassFail(r, p, "Zero clip plane");
-
-	p = testClipping(MODE_DENORM);
-	reportPassFail(r, p, "Denorm clip plane");
-
-	p = testClipping(MODE_OVERFLOW);
-	reportPassFail(r, p, "Overflow clip plane");
-
-
-	p = testOverflow();
-	reportPassFail(r, p, "Overflow");
-
-	r.pass = (r.numFailed == 0);
-}
-
-
-// The test object itself:
-FPExceptionsTest FPExceptionsTest("fpexceptions", // test name
-	"window, rgb",  // surface/pixel format
-	"", // no extensions required
-	"Test for floating point exceptions caused by +/-infinity, Nan, divide by zero, etc in a number of circumstances.\n");
-
-
-} // namespace GLEAN
diff --git a/tests/glean/tfpexceptions.h b/tests/glean/tfpexceptions.h
deleted file mode 100644
index fee9a0c..0000000
--- a/tests/glean/tfpexceptions.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-// 
-// Copyright (C) 1999  Allen Akin   All Rights Reserved.
-// 
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the
-// Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL ALLEN AKIN BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-// 
-// END_COPYRIGHT
-
-// tfpexceptions.h:  Test for floating point exceptions caused by
-// infinity, Nan, denormalized numbers, divide by zero, etc.
-// Brian Paul  9 November 2005
-
-#ifndef __tfpexceptions_h__
-#define __tfpexceptions_h__
-
-#include "tmultitest.h"
-
-namespace GLEAN {
-
-
-#define windowSize 100
-
-
-class FPExceptionsTest: public MultiTest
-{
-public:
-	FPExceptionsTest(const char* testName, const char* filter,
-                         const char *extensions, const char* description)
-		: MultiTest(testName, filter, extensions, description)
-	{
-	}
-
-	virtual void runOne(MultiTestResult &r, Window &w);
-
-private:
-        enum Mode {
-                MODE_INFINITY,
-                MODE_NAN,
-                MODE_DIVZERO,
-                MODE_DENORM,
-                MODE_OVERFLOW
-        };
-
-	void enableExceptions(bool enable);
-
-        bool testVertices(Mode m);
-        bool testTransformation(Mode m);
-        bool testClipping(Mode m);
-        bool testOverflow(void);
-
-        void reportPassFail(MultiTestResult &r, bool pass, const char *msg) const;
-        void setup(void);
-};
-
-
-} // namespace GLEAN
-
-#endif // __tfpexceptions_h__
-- 
2.1.0



More information about the Piglit mailing list