|
|
|
@@ -0,0 +1,107 @@ |
|
|
|
// |
|
|
|
// Lol Engine |
|
|
|
// |
|
|
|
// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net> |
|
|
|
// This program is free software; you can redistribute it and/or |
|
|
|
// modify it under the terms of the Do What The Fuck You Want To |
|
|
|
// Public License, Version 2, as published by Sam Hocevar. See |
|
|
|
// http://sam.zoy.org/projects/COPYING.WTFPL for more details. |
|
|
|
// |
|
|
|
|
|
|
|
#if defined HAVE_CONFIG_H |
|
|
|
# include "config.h" |
|
|
|
#endif |
|
|
|
|
|
|
|
#include <cppunit/extensions/HelperMacros.h> |
|
|
|
#include <cppunit/TestCaller.h> |
|
|
|
#include <cppunit/TestCase.h> |
|
|
|
#include <cppunit/TestSuite.h> |
|
|
|
|
|
|
|
#include "core.h" |
|
|
|
|
|
|
|
namespace lol |
|
|
|
{ |
|
|
|
|
|
|
|
class HalfTest : public CppUnit::TestCase |
|
|
|
{ |
|
|
|
CPPUNIT_TEST_SUITE(HalfTest); |
|
|
|
CPPUNIT_TEST(test_half_makebits); |
|
|
|
CPPUNIT_TEST(test_half_makeslow); |
|
|
|
CPPUNIT_TEST(test_half_makefast); |
|
|
|
CPPUNIT_TEST(test_half_to_float); |
|
|
|
CPPUNIT_TEST_SUITE_END(); |
|
|
|
|
|
|
|
public: |
|
|
|
HalfTest() : CppUnit::TestCase("Matrix Test") {} |
|
|
|
|
|
|
|
void setUp() |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
void tearDown() {} |
|
|
|
|
|
|
|
void test_half_makebits() |
|
|
|
{ |
|
|
|
for (unsigned int i = 0; i < 0x10000; i++) |
|
|
|
{ |
|
|
|
half a = half::makebits(i); |
|
|
|
uint16_t b = i; |
|
|
|
CPPUNIT_ASSERT_EQUAL(a.bits(), b); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void test_half_makeslow() |
|
|
|
{ |
|
|
|
for (size_t i = 0; i < 8; i++) |
|
|
|
{ |
|
|
|
half a = half::makeslow(array1[i].f); |
|
|
|
uint16_t b = array1[i].x; |
|
|
|
CPPUNIT_ASSERT_EQUAL(a.bits(), b); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void test_half_makefast() |
|
|
|
{ |
|
|
|
for (size_t i = 0; i < 8; i++) |
|
|
|
{ |
|
|
|
half a = half::makefast(array1[i].f); |
|
|
|
uint16_t b = array1[i].x; |
|
|
|
CPPUNIT_ASSERT_EQUAL(a.bits(), b); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void test_half_to_float() |
|
|
|
{ |
|
|
|
#if 0 |
|
|
|
for (unsigned int i = 0; i < 0x10000; i++) |
|
|
|
{ |
|
|
|
half a = half::makebits(i); |
|
|
|
half b = half::makefast((float)a); |
|
|
|
//CPPUNIT_ASSERT_EQUAL(a.bits(), b.bits()); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
struct TestPair { float f; uint16_t x; }; |
|
|
|
|
|
|
|
static TestPair const array1[]; |
|
|
|
}; |
|
|
|
|
|
|
|
HalfTest::TestPair const HalfTest::array1[] = |
|
|
|
{ |
|
|
|
{ 0.0f, 0x0000 }, |
|
|
|
{ -0.0f, 0x8000 }, |
|
|
|
{ 1.0f, 0x3c00 }, |
|
|
|
{ -1.0f, 0xbc00 }, |
|
|
|
{ 2.0f, 0x4000 }, |
|
|
|
{ 0.5f, 0x3800 }, |
|
|
|
{ 0.125f, 0x3000 }, |
|
|
|
{ 15.9375f, 0x4bf8 }, |
|
|
|
}; |
|
|
|
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION(HalfTest); |
|
|
|
|
|
|
|
} /* namespace lol */ |
|
|
|
|