diff options
author | John Novak <jnovak@skedulo.com> | 2022-08-13 07:06:30 +0300 |
---|---|---|
committer | John Novak <jnovak@skedulo.com> | 2022-08-15 03:01:46 +0300 |
commit | a41d831348e6b18a37391a1b34e41bfb2a305e20 (patch) | |
tree | 37fe9202988d88a4cdfbcfeee476965e28cc5ee6 /tests | |
parent | 8194165bb5abc4cd393be15d564cfa402988684c (diff) |
Move most math stuff from support.h into math_utils.h
This is part of larger piece of work of getting rid of "kitchen sink"
style utility/helper files.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/math_utils_tests.cpp | 163 | ||||
-rw-r--r-- | tests/meson.build | 13 | ||||
-rw-r--r-- | tests/support_tests.cpp | 135 | ||||
-rw-r--r-- | tests/vs/tests.vcxproj | 9 | ||||
-rw-r--r-- | tests/vs/tests.vcxproj.filters | 9 |
5 files changed, 180 insertions, 149 deletions
diff --git a/tests/math_utils_tests.cpp b/tests/math_utils_tests.cpp new file mode 100644 index 000000000..e63357efe --- /dev/null +++ b/tests/math_utils_tests.cpp @@ -0,0 +1,163 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (C) 2020-2021 The DOSBox Staging Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "math_utils.h" + +#include <cstdint> +#include <gtest/gtest.h> + +namespace { + +TEST(Support_left_shift_signed, Positive) +{ + // shifting zero ... + int8_t var_8bit = 0; + int16_t var_16bit = 0; + int32_t var_32bit = 0; + // by zero + EXPECT_EQ(left_shift_signed(var_8bit, 0), 0); + EXPECT_EQ(left_shift_signed(var_16bit, 0), 0); + EXPECT_EQ(left_shift_signed(var_32bit, 0), 0); + + // shifting one ... + var_8bit = 1; + var_16bit = 1; + var_32bit = 1; + + // by four + EXPECT_EQ(left_shift_signed(var_8bit, 4), 16); + EXPECT_EQ(left_shift_signed(var_16bit, 4), 16); + EXPECT_EQ(left_shift_signed(var_32bit, 4), 16); + + // by max signed bits + EXPECT_EQ(left_shift_signed(var_8bit, 6), 64); + EXPECT_EQ(left_shift_signed(var_16bit, 14), 16384); + EXPECT_EQ(left_shift_signed(var_32bit, 30), 1073741824); + + // max shiftable value before overflow + var_8bit = INT8_MAX / 2; + var_16bit = INT16_MAX / 2; + var_32bit = INT32_MAX / 2; + + EXPECT_EQ(left_shift_signed(var_8bit, 1), INT8_MAX - 1); + EXPECT_EQ(left_shift_signed(var_16bit, 1), INT16_MAX - 1); + EXPECT_EQ(left_shift_signed(var_32bit, 1), INT32_MAX - 1); +} + +TEST(Support_left_shift_signed, PositiveOverflow) +{ + int8_t var_8bit = INT8_MAX; + int16_t var_16bit = INT16_MAX; + int32_t var_32bit = INT32_MAX; + + EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, 1); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, 1); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, 1); }, ""); + + var_8bit = 1; + var_16bit = 1; + var_32bit = 1; + + EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, 7); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, 15); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, 31); }, ""); +} + +TEST(Support_left_shift_signed, Negative) +{ + // shifting negative one ... + int8_t var_8bit = -1; + int16_t var_16bit = -1; + int32_t var_32bit = -1; + + // by four + EXPECT_EQ(left_shift_signed(var_8bit, 4), -16); + EXPECT_EQ(left_shift_signed(var_16bit, 4), -16); + EXPECT_EQ(left_shift_signed(var_32bit, 4), -16); + + // by max signed bits + EXPECT_EQ(left_shift_signed(var_8bit, 7), INT8_MIN); + EXPECT_EQ(left_shift_signed(var_16bit, 15), INT16_MIN); + EXPECT_EQ(left_shift_signed(var_32bit, 31), INT32_MIN); + + // max shiftable value before overflow + var_8bit = INT8_MIN / 2; + var_16bit = INT16_MIN / 2; + var_32bit = INT32_MIN / 2; + + EXPECT_EQ(left_shift_signed(var_8bit, 1), INT8_MIN); + EXPECT_EQ(left_shift_signed(var_16bit, 1), INT16_MIN); + EXPECT_EQ(left_shift_signed(var_32bit, 1), INT32_MIN); +} + +TEST(Support_left_shift_signed, NegativeOverflow) +{ + int8_t var_8bit = INT8_MIN; + int16_t var_16bit = INT16_MIN; + int32_t var_32bit = INT32_MIN; + + EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, 1); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, 1); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, 1); }, ""); + + var_8bit = -1; + var_16bit = -1; + var_32bit = -1; + + EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, 8); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, 16); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, 32); }, ""); + + // Shift a negative number of bits + EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, -1); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, -100); }, ""); + EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, -10000); }, ""); +} + +TEST(iroundf, valid) +{ + EXPECT_EQ(iroundf(0.0f), 0); + + EXPECT_EQ(iroundf(0.00000000001f), 0); + EXPECT_EQ(iroundf(-0.00000000001f), 0); + + EXPECT_EQ(iroundf(0.5f), 1); + EXPECT_EQ(iroundf(-0.5f), -1); + + EXPECT_EQ(iroundf(0.50001f), 1); + EXPECT_EQ(iroundf(-0.50001f), -1); + + EXPECT_EQ(iroundf(0.499999f), 0); + EXPECT_EQ(iroundf(-0.499999f), 0); + + assert(iroundf(1000000.4f) == 1000000); + assert(iroundf(-1000000.4f) == -1000000); + + assert(iroundf(1000000.5f) == 1000001); + assert(iroundf(-1000000.5f) == -1000001); +} + +TEST(iroundf, invalid) +{ + EXPECT_DEBUG_DEATH({ iroundf(80000000000.0f); }, ""); + EXPECT_DEBUG_DEATH({ iroundf(-80000000000.0f); }, ""); +} + +} // namespace diff --git a/tests/meson.build b/tests/meson.build index 5ba7a9eb0..ec179d178 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -66,19 +66,20 @@ test( # other unit tests unit_tests = [ - {'name': 'bitops', 'deps': []}, + {'name': 'ansi_code_markup', 'deps': [libmisc_dep]}, {'name': 'bit_view', 'deps': []}, + {'name': 'bitops', 'deps': []}, + {'name': 'dos_files', 'deps': [dosbox_dep], 'extra_cpp': []}, + {'name': 'drives', 'deps': [dosbox_dep], 'extra_cpp': []}, {'name': 'int10_modes', 'deps': [dosbox_dep], 'extra_cpp': []}, {'name': 'iohandler_containers', 'deps': [libmisc_dep]}, + {'name': 'math_utils', 'deps': [libmisc_dep]}, {'name': 'rwqueue', 'deps': [libmisc_dep]}, - {'name': 'string_utils', 'deps': [libmisc_dep]}, {'name': 'setup', 'deps': [libmisc_dep]}, - {'name': 'support', 'deps': [libmisc_dep]}, - {'name': 'drives', 'deps': [dosbox_dep], 'extra_cpp': []}, - {'name': 'dos_files', 'deps': [dosbox_dep], 'extra_cpp': []}, {'name': 'shell_cmds', 'deps': [dosbox_dep], 'extra_cpp': []}, {'name': 'shell_redirection', 'deps': [dosbox_dep], 'extra_cpp': []}, - {'name': 'ansi_code_markup', 'deps': [libmisc_dep]}, + {'name': 'string_utils', 'deps': [libmisc_dep]}, + {'name': 'support', 'deps': [libmisc_dep]}, ] extra_link_flags = [] diff --git a/tests/support_tests.cpp b/tests/support_tests.cpp index 790c316f4..7096eaf57 100644 --- a/tests/support_tests.cpp +++ b/tests/support_tests.cpp @@ -156,139 +156,4 @@ TEST(Support_next_uint, UnsignedInvalid) EXPECT_NE(typeid(next_uint_t<uint64_t>), typeid(uint32_t)); } -TEST(Support_left_shift_signed, Positive) -{ - // shifting zero ... - int8_t var_8bit = 0; - int16_t var_16bit = 0; - int32_t var_32bit = 0; - // by zero - EXPECT_EQ(left_shift_signed(var_8bit, 0), 0); - EXPECT_EQ(left_shift_signed(var_16bit, 0), 0); - EXPECT_EQ(left_shift_signed(var_32bit, 0), 0); - - // shifting one ... - var_8bit = 1; - var_16bit = 1; - var_32bit = 1; - - // by four - EXPECT_EQ(left_shift_signed(var_8bit, 4), 16); - EXPECT_EQ(left_shift_signed(var_16bit, 4), 16); - EXPECT_EQ(left_shift_signed(var_32bit, 4), 16); - - // by max signed bits - EXPECT_EQ(left_shift_signed(var_8bit, 6), 64); - EXPECT_EQ(left_shift_signed(var_16bit, 14), 16384); - EXPECT_EQ(left_shift_signed(var_32bit, 30), 1073741824); - - // max shiftable value before overflow - var_8bit = INT8_MAX / 2; - var_16bit = INT16_MAX / 2; - var_32bit = INT32_MAX / 2; - - EXPECT_EQ(left_shift_signed(var_8bit, 1), INT8_MAX - 1); - EXPECT_EQ(left_shift_signed(var_16bit, 1), INT16_MAX - 1); - EXPECT_EQ(left_shift_signed(var_32bit, 1), INT32_MAX - 1); -} - -TEST(Support_left_shift_signed, PositiveOverflow) -{ - int8_t var_8bit = INT8_MAX; - int16_t var_16bit = INT16_MAX; - int32_t var_32bit = INT32_MAX; - - EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, 1); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, 1); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, 1); }, ""); - - var_8bit = 1; - var_16bit = 1; - var_32bit = 1; - - EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, 7); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, 15); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, 31); }, ""); -} - -TEST(Support_left_shift_signed, Negative) -{ - // shifting negative one ... - int8_t var_8bit = -1; - int16_t var_16bit = -1; - int32_t var_32bit = -1; - - // by four - EXPECT_EQ(left_shift_signed(var_8bit, 4), -16); - EXPECT_EQ(left_shift_signed(var_16bit, 4), -16); - EXPECT_EQ(left_shift_signed(var_32bit, 4), -16); - - // by max signed bits - EXPECT_EQ(left_shift_signed(var_8bit, 7), INT8_MIN); - EXPECT_EQ(left_shift_signed(var_16bit, 15), INT16_MIN); - EXPECT_EQ(left_shift_signed(var_32bit, 31), INT32_MIN); - - // max shiftable value before overflow - var_8bit = INT8_MIN / 2; - var_16bit = INT16_MIN / 2; - var_32bit = INT32_MIN / 2; - - EXPECT_EQ(left_shift_signed(var_8bit, 1), INT8_MIN); - EXPECT_EQ(left_shift_signed(var_16bit, 1), INT16_MIN); - EXPECT_EQ(left_shift_signed(var_32bit, 1), INT32_MIN); -} - -TEST(Support_left_shift_signed, NegativeOverflow) -{ - int8_t var_8bit = INT8_MIN; - int16_t var_16bit = INT16_MIN; - int32_t var_32bit = INT32_MIN; - - EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, 1); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, 1); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, 1); }, ""); - - var_8bit = -1; - var_16bit = -1; - var_32bit = -1; - - EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, 8); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, 16); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, 32); }, ""); - - // Shift a negative number of bits - EXPECT_DEBUG_DEATH({ left_shift_signed(var_8bit, -1); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_16bit, -100); }, ""); - EXPECT_DEBUG_DEATH({ left_shift_signed(var_32bit, -10000); }, ""); -} - -TEST(iroundf, valid) -{ - EXPECT_EQ(iroundf(0.0f), 0); - - EXPECT_EQ(iroundf(0.00000000001f), 0); - EXPECT_EQ(iroundf(-0.00000000001f), 0); - - EXPECT_EQ(iroundf(0.5f), 1); - EXPECT_EQ(iroundf(-0.5f), -1); - - EXPECT_EQ(iroundf(0.50001f), 1); - EXPECT_EQ(iroundf(-0.50001f), -1); - - EXPECT_EQ(iroundf(0.499999f), 0); - EXPECT_EQ(iroundf(-0.499999f), 0); - - assert(iroundf(1000000.4f) == 1000000); - assert(iroundf(-1000000.4f) == -1000000); - - assert(iroundf(1000000.5f) == 1000001); - assert(iroundf(-1000000.5f) == -1000001); -} - -TEST(iroundf, invalid) -{ - EXPECT_DEBUG_DEATH({ iroundf(80000000000.0f); }, ""); - EXPECT_DEBUG_DEATH({ iroundf(-80000000000.0f); }, ""); -} - } // namespace diff --git a/tests/vs/tests.vcxproj b/tests/vs/tests.vcxproj index 9143fc6e7..c36c68e50 100644 --- a/tests/vs/tests.vcxproj +++ b/tests/vs/tests.vcxproj @@ -333,6 +333,9 @@ $(TargetPath)</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemGroup> + <ClCompile Include="..\..\src\libs\ghc\fs_std_impl.cpp" /> + <ClCompile Include="..\..\src\libs\loguru\loguru.cpp" /> + <ClCompile Include="..\..\src\libs\whereami\whereami.c" /> <ClCompile Include="..\..\src\misc\ansi_code_markup.cpp" /> <ClCompile Include="..\..\src\misc\cross.cpp" /> <ClCompile Include="..\..\src\misc\fs_utils_win32.cpp" /> @@ -340,14 +343,12 @@ $(TargetPath)</Command> <ClCompile Include="..\..\src\misc\setup.cpp" /> <ClCompile Include="..\..\src\misc\string_utils.cpp" /> <ClCompile Include="..\..\src\misc\support.cpp" /> - <ClCompile Include="..\..\src\libs\ghc\fs_std_impl.cpp" /> - <ClCompile Include="..\..\src\libs\loguru\loguru.cpp" /> - <ClCompile Include="..\..\src\libs\whereami\whereami.c" /> <ClCompile Include="..\ansi_code_markup_tests.cpp" /> - <ClCompile Include="..\bitops_tests.cpp" /> <ClCompile Include="..\bit_view_tests.cpp" /> + <ClCompile Include="..\bitops_tests.cpp" /> <ClCompile Include="..\fs_utils_tests.cpp" /> <ClCompile Include="..\iohandler_containers_tests.cpp" /> + <ClCompile Include="..\math_utils_tests.cpp" /> <ClCompile Include="..\rwqueue_tests.cpp" /> <ClCompile Include="..\setup_tests.cpp" /> <ClCompile Include="..\string_utils_tests.cpp" /> diff --git a/tests/vs/tests.vcxproj.filters b/tests/vs/tests.vcxproj.filters index de77c3e52..92738adbd 100644 --- a/tests/vs/tests.vcxproj.filters +++ b/tests/vs/tests.vcxproj.filters @@ -1,6 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> + <ClCompile Include="..\..\src\libs\ghc\fs_std_impl.cpp" /> + <ClCompile Include="..\..\src\libs\loguru\loguru.cpp" /> + <ClCompile Include="..\..\src\libs\whereami\whereami.c" /> <ClCompile Include="..\..\src\misc\ansi_code_markup.cpp" /> <ClCompile Include="..\..\src\misc\cross.cpp" /> <ClCompile Include="..\..\src\misc\fs_utils_win32.cpp" /> @@ -8,14 +11,12 @@ <ClCompile Include="..\..\src\misc\setup.cpp" /> <ClCompile Include="..\..\src\misc\string_utils.cpp" /> <ClCompile Include="..\..\src\misc\support.cpp" /> - <ClCompile Include="..\..\src\libs\ghc\fs_std_impl.cpp" /> - <ClCompile Include="..\..\src\libs\loguru\loguru.cpp" /> - <ClCompile Include="..\..\src\libs\whereami\whereami.c" /> <ClCompile Include="..\ansi_code_markup_tests.cpp" /> - <ClCompile Include="..\bitops_tests.cpp" /> <ClCompile Include="..\bit_view_tests.cpp" /> + <ClCompile Include="..\bitops_tests.cpp" /> <ClCompile Include="..\fs_utils_tests.cpp" /> <ClCompile Include="..\iohandler_containers_tests.cpp" /> + <ClCompile Include="..\math_utils_tests.cpp" /> <ClCompile Include="..\rwqueue_tests.cpp" /> <ClCompile Include="..\setup_tests.cpp" /> <ClCompile Include="..\string_utils_tests.cpp" /> |