diff options
Diffstat (limited to 'libs/assimp/test/unit/utFastAtof.cpp')
-rw-r--r-- | libs/assimp/test/unit/utFastAtof.cpp | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/libs/assimp/test/unit/utFastAtof.cpp b/libs/assimp/test/unit/utFastAtof.cpp new file mode 100644 index 0000000..cc25482 --- /dev/null +++ b/libs/assimp/test/unit/utFastAtof.cpp @@ -0,0 +1,190 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (assimp) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2022, assimp team + + + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ +#include "UnitTestPCH.h" + +#include <assimp/fast_atof.h> + +namespace { + +template <typename Real> +bool IsNan(Real x) { + return x != x; +} + +template <typename Real> +bool IsInf(Real x) { + return std::abs(x) == std::numeric_limits<Real>::infinity(); +} + +} // Namespace + +class FastAtofTest : public ::testing::Test +{ +protected: + template <typename Real, typename AtofFunc> + static void RunTest(AtofFunc atof_func) + { + const Real kEps = 1e-5f; + +#define TEST_CASE(NUM) EXPECT_NEAR(static_cast<Real>(NUM), atof_func(#NUM), kEps) +#define TEST_CASE_NAN(NUM) EXPECT_TRUE(IsNan(atof_func(#NUM))) +#define TEST_CASE_INF(NUM) EXPECT_TRUE(IsInf(atof_func(#NUM))) + + TEST_CASE(0); + TEST_CASE(1.354); + TEST_CASE(1054E-3); + TEST_CASE(-1054E-3); + TEST_CASE(-10.54E30); + TEST_CASE(-345554.54e-5); + TEST_CASE(-34555.534954e-5); + TEST_CASE(-34555.534954e-5); + TEST_CASE(549067); + TEST_CASE(567); + TEST_CASE(446); + TEST_CASE(7); + TEST_CASE(73); + TEST_CASE(256); + TEST_CASE(5676); + TEST_CASE(3); + TEST_CASE(738); + TEST_CASE(684); + TEST_CASE(26); + TEST_CASE(673.678e-56); + TEST_CASE(53); + TEST_CASE(67); + TEST_CASE(684); + TEST_CASE(-5437E24); + TEST_CASE(8); + TEST_CASE(84); + TEST_CASE(3); + TEST_CASE(56733.68); + TEST_CASE(786); + TEST_CASE(6478); + TEST_CASE(34563.65683598734); + TEST_CASE(5673); + TEST_CASE(784e-3); + TEST_CASE(8678); + TEST_CASE(46784); + TEST_CASE(-54.0888e-6); + TEST_CASE(100000e10); + TEST_CASE(1e-307); + TEST_CASE(0.000001e-301); + TEST_CASE(0.0000001e-300); + TEST_CASE(0.00000001e-299); + TEST_CASE(1000000e-313); + TEST_CASE(10000000e-314); + TEST_CASE(100000000e-315); + TEST_CASE(12.345); + TEST_CASE(12.345e19); + TEST_CASE(-.1e+9); + TEST_CASE(.125); + TEST_CASE(1e20); + TEST_CASE(0e-19); + TEST_CASE(400012); + TEST_CASE(5.9e-76); + TEST_CASE_INF(inf); + TEST_CASE_INF(inf); + TEST_CASE_INF(infinity); + TEST_CASE_INF(Inf); + TEST_CASE_INF(-Inf); + TEST_CASE_INF(+InFiNiTy); + TEST_CASE_NAN(NAN); + TEST_CASE_NAN(NaN); + TEST_CASE_NAN(nan); + EXPECT_EQ(static_cast<Real>(6), atof_func("006")); + EXPECT_EQ(static_cast<Real>(5.3), atof_func("5.300 ")); + + /* Failing Cases: + EXPECT_EQ(static_cast<Real>(6), atof_func(" 006")); + EXPECT_EQ(static_cast<Real>(5.3), atof_func(" 5.300 ")); + TEST_CASE(-10.54E45); + TEST_CASE(0x0A); + TEST_CASE(0xA0); + TEST_CASE(0x1p1023); + TEST_CASE(0x1000p1011); + TEST_CASE(0x1p1020); + TEST_CASE(0x0.00001p1040); + TEST_CASE(0x1p-1021); + TEST_CASE(0x1000p-1033); + TEST_CASE(0x10000p-1037); + TEST_CASE(0x0.001p-1009); + TEST_CASE(0x0.0001p-1005); + TEST_CASE(0x1.4p+3); + TEST_CASE(0xAp0); + TEST_CASE(0x0Ap0); + TEST_CASE(0x0.A0p8); + TEST_CASE(0x0.50p9); + TEST_CASE(0x0.28p10); + TEST_CASE(0x0.14p11); + TEST_CASE(0x0.0A0p12); + TEST_CASE(0x0.050p13); + TEST_CASE(0x0.028p14); + TEST_CASE(0x0.014p15); + TEST_CASE(0x00.00A0p16); + TEST_CASE(0x00.0050p17); + TEST_CASE(0x00.0028p18); + TEST_CASE(0x00.0014p19); + TEST_CASE(0x1p-1023); + TEST_CASE(0x0.8p-1022); + TEST_CASE(0x80000Ap-23); + TEST_CASE(0x100000000000008p0); + TEST_CASE(0x100000000000008.p0); + TEST_CASE(0x100000000000008.00p0); + TEST_CASE(0x10000000000000800p0); + TEST_CASE(0x10000000000000801p0) + */ + +#undef TEST_CASE +#undef TEST_CASE_NAN +#undef TEST_CASE_INF + } +}; + +struct FastAtofWrapper { + ai_real operator()(const char* str) { return Assimp::fast_atof(str); } +}; + +TEST_F(FastAtofTest, FastAtof) +{ + RunTest<ai_real>(FastAtofWrapper()); +} |