/* * Copyright 2010-2025 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bx/blob/master/LICENSE */ #include "test.h" #include TEST_CASE("Bit cast", "[cast]") { STATIC_REQUIRE(0x4172f58bc0000000ull == bx::bitCast(19880124.0) ); STATIC_REQUIRE(0x3fe9000000000000ull == bx::bitCast(0.781250) ); STATIC_REQUIRE(19880124.0 == bx::bitCast(0x4172f58bc0000000ull) ); STATIC_REQUIRE(0.781250 == bx::bitCast(0x3fe9000000000000ull) ); } TEST_CASE("Narrow cast", "[cast]") { REQUIRE(127 == bx::narrowCast(int32_t(127) ) ); REQUIRE_ASSERTS(bx::narrowCast(int32_t(128) ) ); REQUIRE_ASSERTS(bx::narrowCast(uint32_t(128) ) ); REQUIRE(128 == bx::narrowCast(int32_t(128) ) ); } template inline constexpr bool saturateCastTest(Ty _expectedMin, Ty _expectedMax) { return true && _expectedMin == bx::saturateCast(static_cast(_expectedMin) ) && _expectedMax == bx::saturateCast(static_cast(_expectedMax) ) ; } TEST_CASE("Saturate cast", "[cast]") { STATIC_REQUIRE(-128 == bx::saturateCast( int32_t( -255) ) ); STATIC_REQUIRE( 127 == bx::saturateCast( int32_t( 255) ) ); STATIC_REQUIRE( 127 == bx::saturateCast( int32_t( 127) ) ); STATIC_REQUIRE( 127 == bx::saturateCast( int32_t( 128) ) ); STATIC_REQUIRE( 127 == bx::saturateCast(uint32_t( 128) ) ); STATIC_REQUIRE(-128 == bx::saturateCast( float(-1389.9831f) ) ); STATIC_REQUIRE( 127 == bx::saturateCast( float( 1389.9831f) ) ); STATIC_REQUIRE( 0 == bx::saturateCast( int32_t( -128) ) ); STATIC_REQUIRE( 128 == bx::saturateCast( int32_t( 128) ) ); STATIC_REQUIRE( -13 == bx::saturateCast( float( -13.89f) ) ); STATIC_REQUIRE( 13 == bx::saturateCast( float( 13.89f) ) ); STATIC_REQUIRE( 0 == bx::saturateCast( float( -13.89f) ) ); STATIC_REQUIRE( 13 == bx::saturateCast( float( 13.89f) ) ); STATIC_REQUIRE(saturateCastTest(-128, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 127) ); STATIC_REQUIRE(saturateCastTest(-128, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 127) ); STATIC_REQUIRE(saturateCastTest(-128, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 127) ); STATIC_REQUIRE(saturateCastTest(-128, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( -128, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( -32768, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 32767) ); STATIC_REQUIRE(saturateCastTest( -32768, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 32767) ); STATIC_REQUIRE(saturateCastTest( -32768, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( -128, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( -32768, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( -2147483648, 2147483647) ); STATIC_REQUIRE(saturateCastTest( 0, 2147483647) ); STATIC_REQUIRE(saturateCastTest( -2147483648, 2147483647) ); STATIC_REQUIRE(saturateCastTest( 0, 2147483647) ); STATIC_REQUIRE(saturateCastTest( 0, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( 0, 2147483647) ); STATIC_REQUIRE(saturateCastTest( 0, 4294967295) ); STATIC_REQUIRE(saturateCastTest( 0, 4294967295) ); STATIC_REQUIRE(saturateCastTest( 0, 4294967295) ); STATIC_REQUIRE(saturateCastTest( -128, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( -32768, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( -2147483648, 2147483647) ); STATIC_REQUIRE(saturateCastTest( 0, 4294967295) ); STATIC_REQUIRE(saturateCastTest( -9223372036854775808ll, 9223372036854775807ll) ); STATIC_REQUIRE(saturateCastTest( 0, 9223372036854775807ll) ); STATIC_REQUIRE(saturateCastTest( 0, 127) ); STATIC_REQUIRE(saturateCastTest( 0, 255) ); STATIC_REQUIRE(saturateCastTest( 0, 32767) ); STATIC_REQUIRE(saturateCastTest( 0, 65535) ); STATIC_REQUIRE(saturateCastTest( 0, 2147483647) ); STATIC_REQUIRE(saturateCastTest( 0, 4294967295) ); STATIC_REQUIRE(saturateCastTest( 0, 9223372036854775807ull) ); STATIC_REQUIRE(saturateCastTest( 0, 18446744073709551615ull) ); }