xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
tests
libxrpl
basics
tests/libxrpl/basics/mulDiv.cpp
1
#include <xrpl/basics/mulDiv.h>
2
3
#include <gtest/gtest.h>
4
5
#include <
cstdint
>
6
#include <
limits
>
7
8
using namespace
xrpl
;
9
10
TEST
(MulDiv, mul_div)
11
{
12
auto
const
max
=
std::numeric_limits<std::uint64_t>::max
();
13
std::uint64_t
const
max32 =
std::numeric_limits<std::uint32_t>::max
();
14
15
auto
result =
mulDiv
(85, 20, 5);
16
ASSERT_TRUE(result.has_value());
17
EXPECT_EQ(*result, 340);
// NOLINT(bugprone-unchecked-optional-access)
18
result =
mulDiv
(20, 85, 5);
19
ASSERT_TRUE(result.has_value());
20
EXPECT_EQ(*result, 340);
// NOLINT(bugprone-unchecked-optional-access)
21
22
result =
mulDiv
(0, max - 1, max - 3);
23
ASSERT_TRUE(result.has_value());
24
EXPECT_EQ(*result, 0);
// NOLINT(bugprone-unchecked-optional-access)
25
result =
mulDiv
(max - 1, 0, max - 3);
26
ASSERT_TRUE(result.has_value());
27
EXPECT_EQ(*result, 0);
// NOLINT(bugprone-unchecked-optional-access)
28
29
result =
mulDiv
(max, 2, max / 2);
30
ASSERT_TRUE(result.has_value());
31
EXPECT_EQ(*result, 4);
// NOLINT(bugprone-unchecked-optional-access)
32
result =
mulDiv
(max, 1000, max / 1000);
33
ASSERT_TRUE(result.has_value());
34
EXPECT_EQ(*result, 1000000);
// NOLINT(bugprone-unchecked-optional-access)
35
result =
mulDiv
(max, 1000, max / 1001);
36
ASSERT_TRUE(result.has_value());
37
EXPECT_EQ(*result, 1001000);
// NOLINT(bugprone-unchecked-optional-access)
38
result =
mulDiv
(max32 + 1, max32 + 1, 5);
39
ASSERT_TRUE(result.has_value());
40
EXPECT_EQ(*result, 3689348814741910323);
// NOLINT(bugprone-unchecked-optional-access)
41
42
// Overflow
43
result =
mulDiv
(max - 1, max - 2, 5);
44
EXPECT_FALSE(result.has_value());
45
}
cstdint
std::uint64_t
limits
std::max
T max(T... args)
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::mulDiv
std::optional< std::uint64_t > mulDiv(std::uint64_t value, std::uint64_t mul, std::uint64_t div)
Return value*mul/div accurately.
Definition
libxrpl/basics/mulDiv.cpp:11
xrpl::TEST
TEST(FileUtilitiesTest, get_file_contents)
Definition
tests/libxrpl/basics/FileUtilities.cpp:60
Generated by
1.17.0