xrpld
Loading...
Searching...
No Matches
Zero.cpp
1#include <xrpl/beast/utility/Zero.h>
2
3#include <gtest/gtest.h>
4
5namespace beast {
6
8{
9};
10
11int
13{
14 return 0;
15}
16
17namespace inner_adl_test {
18
20{
21};
22
23int
25{
26 return 0;
27}
28
29} // namespace inner_adl_test
30
31namespace {
32
33struct IntegerWrapper
34{
35 int value;
36
37 IntegerWrapper(int v) : value(v)
38 {
39 }
40
41 [[nodiscard]] int
42 signum() const
43 {
44 return value;
45 }
46};
47
48void
49testLhsZero(IntegerWrapper x)
50{
51 EXPECT_EQ(x >= kZero, x.signum() >= 0);
52 EXPECT_EQ(x > kZero, x.signum() > 0);
53 EXPECT_EQ(x == kZero, x.signum() == 0);
54 EXPECT_EQ(x != kZero, x.signum() != 0);
55 EXPECT_EQ(x < kZero, x.signum() < 0);
56 EXPECT_EQ(x <= kZero, x.signum() <= 0);
57}
58
59void
60testRhsZero(IntegerWrapper x)
61{
62 EXPECT_EQ(kZero >= x, 0 >= x.signum());
63 EXPECT_EQ(kZero > x, 0 > x.signum());
64 EXPECT_EQ(kZero == x, 0 == x.signum());
65 EXPECT_EQ(kZero != x, 0 != x.signum());
66 EXPECT_EQ(kZero < x, 0 < x.signum());
67 EXPECT_EQ(kZero <= x, 0 <= x.signum());
68}
69
70} // namespace
71
73{
74 testLhsZero(-7);
75 testLhsZero(0);
76 testLhsZero(32);
77}
78
80{
81 testRhsZero(-4);
82 testRhsZero(0);
83 testRhsZero(64);
84}
85
87{
88 EXPECT_TRUE(AdlTester{} == kZero);
89 EXPECT_TRUE(inner_adl_test::AdlTester2{} == kZero);
90}
91
92} // namespace beast
int signum(AdlTester2)
Definition Zero.cpp:24
TEST(LexicalCast, round_trips_every_int16_value)
auto signum(T const &t)
Default implementation of signum calls the method on the class.
Definition Zero.h:37
constexpr Zero kZero
Definition Zero.h:30
Zero allows classes to offer efficient comparisons to zero.
Definition Zero.h:26