Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dosbox-staging/dosbox-staging.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJohn Novak <jnovak@skedulo.com>2022-08-13 07:06:30 +0300
committerJohn Novak <jnovak@skedulo.com>2022-08-15 03:01:46 +0300
commita41d831348e6b18a37391a1b34e41bfb2a305e20 (patch)
tree37fe9202988d88a4cdfbcfeee476965e28cc5ee6 /tests
parent8194165bb5abc4cd393be15d564cfa402988684c (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.cpp163
-rw-r--r--tests/meson.build13
-rw-r--r--tests/support_tests.cpp135
-rw-r--r--tests/vs/tests.vcxproj9
-rw-r--r--tests/vs/tests.vcxproj.filters9
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" />