1#include <xrpl/basics/mulDiv.h>
3#include <gtest/gtest.h>
15 auto result =
mulDiv(85, 20, 5);
16 ASSERT_TRUE(result.has_value());
17 EXPECT_EQ(*result, 340);
18 result =
mulDiv(20, 85, 5);
19 ASSERT_TRUE(result.has_value());
20 EXPECT_EQ(*result, 340);
22 result =
mulDiv(0, max - 1, max - 3);
23 ASSERT_TRUE(result.has_value());
24 EXPECT_EQ(*result, 0);
25 result =
mulDiv(max - 1, 0, max - 3);
26 ASSERT_TRUE(result.has_value());
27 EXPECT_EQ(*result, 0);
29 result =
mulDiv(max, 2, max / 2);
30 ASSERT_TRUE(result.has_value());
31 EXPECT_EQ(*result, 4);
32 result =
mulDiv(max, 1000, max / 1000);
33 ASSERT_TRUE(result.has_value());
34 EXPECT_EQ(*result, 1000000);
35 result =
mulDiv(max, 1000, max / 1001);
36 ASSERT_TRUE(result.has_value());
37 EXPECT_EQ(*result, 1001000);
38 result =
mulDiv(max32 + 1, max32 + 1, 5);
39 ASSERT_TRUE(result.has_value());
40 EXPECT_EQ(*result, 3689348814741910323);
43 result =
mulDiv(max - 1, max - 2, 5);
44 EXPECT_FALSE(result.has_value());
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::optional< std::uint64_t > mulDiv(std::uint64_t value, std::uint64_t mul, std::uint64_t div)
Return value*mul/div accurately.