Blame HalfTest/testClassification.cpp

Packit 8dc392
#include <testClassification.h>
Packit 8dc392
#include "half.h"
Packit 8dc392
#include <iostream>
Packit 8dc392
#include <assert.h>
Packit 8dc392
Packit 8dc392
Packit 8dc392
using namespace std;
Packit 8dc392
Packit 8dc392
namespace {
Packit 8dc392
Packit 8dc392
void
Packit 8dc392
testClass (half h,
Packit 8dc392
	   bool finite,
Packit 8dc392
	   bool normalized,
Packit 8dc392
	   bool denormalized,
Packit 8dc392
	   bool zero,
Packit 8dc392
	   bool nan,
Packit 8dc392
	   bool infinity,
Packit 8dc392
	   bool negative)
Packit 8dc392
{
Packit 8dc392
    cout.width (15);
Packit 8dc392
    cout.precision (8);
Packit 8dc392
Packit 8dc392
    cout << h << "    ";
Packit 8dc392
    printBits (cout, h);
Packit 8dc392
    cout << "    ";
Packit 8dc392
Packit 8dc392
    if (h.isFinite())
Packit 8dc392
	cout << "finite ";
Packit 8dc392
Packit 8dc392
    if (h.isNormalized())
Packit 8dc392
	cout << "normalized ";
Packit 8dc392
Packit 8dc392
    if (h.isDenormalized())
Packit 8dc392
	cout << "denormalized ";
Packit 8dc392
Packit 8dc392
    if (h.isZero())
Packit 8dc392
	cout << "zero ";
Packit 8dc392
Packit 8dc392
    if (h.isNan())
Packit 8dc392
	cout << "nan ";
Packit 8dc392
Packit 8dc392
    if (h.isInfinity())
Packit 8dc392
	cout << "infinity ";
Packit 8dc392
Packit 8dc392
    if (h.isNegative())
Packit 8dc392
	cout << "negative ";
Packit 8dc392
Packit 8dc392
    cout << endl;
Packit 8dc392
Packit 8dc392
    assert (h.isFinite() == finite);
Packit 8dc392
    assert (h.isNormalized() == normalized);
Packit 8dc392
    assert (h.isDenormalized() == denormalized);
Packit 8dc392
    assert (h.isZero() == zero);
Packit 8dc392
    assert (h.isNan() == nan);
Packit 8dc392
    assert (h.isInfinity() == infinity);
Packit 8dc392
    assert (h.isNegative() == negative);
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatPosInfinity ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0x7f800000;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatNegInfinity ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0xff800000;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatPosQNan1 ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0x7fffffff;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatNegQNan1 ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0xffffffff;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatPosQNan2 ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0x7fd55555;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatNegQNan2 ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0xffd55555;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
} // namespace
Packit 8dc392
Packit 8dc392
Packit 8dc392
void
Packit 8dc392
testClassification()
Packit 8dc392
{
Packit 8dc392
    cout << "classification of bit patterns\n\n";
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    //					fini norm deno zero nan  inf  neg
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testClass (0.0,			1,   0,   0,   1,   0,   0,   0);
Packit 8dc392
Packit 8dc392
    testClass (1.0,			1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (1.0f + HALF_EPSILON,	1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (HALF_MIN,		1,   0,   1,   0,   0,   0,   0);
Packit 8dc392
    testClass (HALF_MIN + HALF_MIN,	1,   0,   1,   0,   0,   0,   0);
Packit 8dc392
    testClass (HALF_NRM_MIN,		1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (HALF_NRM_MIN + HALF_MIN,	1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (HALF_NRM_MIN - HALF_MIN,	1,   0,   1,   0,   0,   0,   0);
Packit 8dc392
    testClass (2.0f,			1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (3.0f,			1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (0.1f,			1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (0.2f,			1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (0.3f,			1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (HALF_MAX,		1,   1,   0,   0,   0,   0,   0);
Packit 8dc392
    testClass (floatPosInfinity(),	0,   0,   0,   0,   0,   1,   0);
Packit 8dc392
    testClass (floatPosQNan1(),		0,   0,   0,   0,   1,   0,   0);
Packit 8dc392
    testClass (floatPosQNan2(),		0,   0,   0,   0,   1,   0,   0);
Packit 8dc392
Packit 8dc392
    testClass (-1.0f,			1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-1.0f - HALF_EPSILON,	1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-HALF_MIN,		1,   0,   1,   0,   0,   0,   1);
Packit 8dc392
    testClass (-HALF_MIN - HALF_MIN,	1,   0,   1,   0,   0,   0,   1);
Packit 8dc392
    testClass (-HALF_NRM_MIN,		1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-HALF_NRM_MIN - HALF_MIN,1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-HALF_NRM_MIN + HALF_MIN,1,   0,   1,   0,   0,   0,   1);
Packit 8dc392
    testClass (-2.0f,			1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-3.0f,			1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-0.1f,			1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-0.2f,			1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-0.3f,			1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (-HALF_MAX,		1,   1,   0,   0,   0,   0,   1);
Packit 8dc392
    testClass (floatNegInfinity(),	0,   0,   0,   0,   0,   1,   1);
Packit 8dc392
    testClass (floatNegQNan1(),		0,   0,   0,   0,   1,   0,   1);
Packit 8dc392
    testClass (floatNegQNan2(),		0,   0,   0,   0,   1,   0,   1);
Packit 8dc392
Packit 8dc392
    cout << "\n";
Packit 8dc392
Packit 8dc392
    testClass (half::posInf(),		0,   0,   0,   0,   0,   1,   0);
Packit 8dc392
    testClass (half::negInf(),		0,   0,   0,   0,   0,   1,   1);
Packit 8dc392
    testClass (half::qNan(),		0,   0,   0,   0,   1,   0,   0);
Packit 8dc392
    testClass (half::sNan(),		0,   0,   0,   0,   1,   0,   0);
Packit 8dc392
Packit 8dc392
    cout << "ok\n\n" << flush;
Packit 8dc392
}