/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/UnitTests/FoundationTest/Math/Float16Test.cpp
58 строк
2 KB
Jan Krassnigg
MSFT contribution: Made all #includes relative to their project (#448)
09 авг 2021, 23:45
Не верифицирован
09 авг 2021, 23:45
2b8da9c
Код
Авторство
О чём код?
#include <FoundationTest/FoundationTestPCH.h> #include <Foundation/Math/Float16.h> #include <Foundation/Strings/String.h> EZ_CREATE_SIMPLE_TEST(Math, Float16) { EZ_TEST_BLOCK(ezTestBlock::Enabled, "From float and back") { // default constructor EZ_TEST_BOOL(static_cast<float>(ezFloat16()) == 0.0f); // Border cases - exact matching needed. EZ_TEST_FLOAT(static_cast<float>(ezFloat16(1.0f)), 1.0f, 0); EZ_TEST_FLOAT(static_cast<float>(ezFloat16(-1.0f)), -1.0f, 0); EZ_TEST_FLOAT(static_cast<float>(ezFloat16(0.0f)), 0.0f, 0); EZ_TEST_FLOAT(static_cast<float>(ezFloat16(-0.0f)), -0.0f, 0); EZ_TEST_BOOL(static_cast<float>(ezFloat16(ezMath::Infinity<float>())) == ezMath::Infinity<float>()); EZ_TEST_BOOL(static_cast<float>(ezFloat16(-ezMath::Infinity<float>())) == -ezMath::Infinity<float>()); EZ_TEST_BOOL(ezMath::IsNaN(static_cast<float>(ezFloat16(ezMath::NaN<float>())))); // Some random values. EZ_TEST_FLOAT(static_cast<float>(ezFloat16(42.0f)), 42.0f, ezMath::LargeEpsilon<float>()); EZ_TEST_FLOAT(static_cast<float>(ezFloat16(1.e3f)), 1.e3f, ezMath::LargeEpsilon<float>()); EZ_TEST_FLOAT(static_cast<float>(ezFloat16(-1230.0f)), -1230.0f, ezMath::LargeEpsilon<float>()); EZ_TEST_FLOAT(static_cast<float>(ezFloat16(ezMath::Pi<float>())), ezMath::Pi<float>(), ezMath::HugeEpsilon<float>()); // Denormalized float. EZ_TEST_FLOAT(static_cast<float>(ezFloat16(1.e-40f)), 0.0f, 0); EZ_TEST_FLOAT(static_cast<float>(ezFloat16(1.e-44f)), 0.0f, 0); // Clamping of too large/small values // Half only supports 2^-14 to 2^14 (in 10^x this is roughly 4.51) (see Wikipedia) EZ_TEST_FLOAT(static_cast<float>(ezFloat16(1.e-10f)), 0.0f, 0); EZ_TEST_BOOL(static_cast<float>(ezFloat16(1.e5f)) == ezMath::Infinity<float>()); EZ_TEST_BOOL(static_cast<float>(ezFloat16(-1.e5f)) == -ezMath::Infinity<float>()); } EZ_TEST_BLOCK(ezTestBlock::Enabled, "operator ==") { EZ_TEST_BOOL(ezFloat16(1.0f) == ezFloat16(1.0f)); EZ_TEST_BOOL(ezFloat16(10000000.0f) == ezFloat16(10000000.0f)); } EZ_TEST_BLOCK(ezTestBlock::Enabled, "operator !=") { EZ_TEST_BOOL(ezFloat16(1.0f) != ezFloat16(-1.0f)); EZ_TEST_BOOL(ezFloat16(10000000.0f) != ezFloat16(10000.0f)); } EZ_TEST_BLOCK(ezTestBlock::Enabled, "GetRawData / SetRawData") { ezFloat16 f; f.SetRawData(23); EZ_TEST_INT(f.GetRawData(), 23); } }