@@ -17,26 +17,43 @@ BOOST_AUTO_TEST_CASE(feefrac_operators)
17
17
FeeFrac empty{0 , 0 };
18
18
FeeFrac zero_fee{0 , 1 }; // zero-fee allowed
19
19
20
- BOOST_CHECK_EQUAL (zero_fee.EvaluateFee (0 ), 0 );
21
- BOOST_CHECK_EQUAL (zero_fee.EvaluateFee (1 ), 0 );
22
- BOOST_CHECK_EQUAL (zero_fee.EvaluateFee (1000000 ), 0 );
23
- BOOST_CHECK_EQUAL (zero_fee.EvaluateFee (0x7fffffff ), 0 );
24
-
25
- BOOST_CHECK_EQUAL (p1.EvaluateFee (0 ), 0 );
26
- BOOST_CHECK_EQUAL (p1.EvaluateFee (1 ), 10 );
27
- BOOST_CHECK_EQUAL (p1.EvaluateFee (100000000 ), 1000000000 );
28
- BOOST_CHECK_EQUAL (p1.EvaluateFee (0x7fffffff ), int64_t (0x7fffffff ) * 10 );
20
+ BOOST_CHECK_EQUAL (zero_fee.EvaluateFeeDown (0 ), 0 );
21
+ BOOST_CHECK_EQUAL (zero_fee.EvaluateFeeDown (1 ), 0 );
22
+ BOOST_CHECK_EQUAL (zero_fee.EvaluateFeeDown (1000000 ), 0 );
23
+ BOOST_CHECK_EQUAL (zero_fee.EvaluateFeeDown (0x7fffffff ), 0 );
24
+ BOOST_CHECK_EQUAL (zero_fee.EvaluateFeeUp (0 ), 0 );
25
+ BOOST_CHECK_EQUAL (zero_fee.EvaluateFeeUp (1 ), 0 );
26
+ BOOST_CHECK_EQUAL (zero_fee.EvaluateFeeUp (1000000 ), 0 );
27
+ BOOST_CHECK_EQUAL (zero_fee.EvaluateFeeUp (0x7fffffff ), 0 );
28
+
29
+ BOOST_CHECK_EQUAL (p1.EvaluateFeeDown (0 ), 0 );
30
+ BOOST_CHECK_EQUAL (p1.EvaluateFeeDown (1 ), 10 );
31
+ BOOST_CHECK_EQUAL (p1.EvaluateFeeDown (100000000 ), 1000000000 );
32
+ BOOST_CHECK_EQUAL (p1.EvaluateFeeDown (0x7fffffff ), int64_t (0x7fffffff ) * 10 );
33
+ BOOST_CHECK_EQUAL (p1.EvaluateFeeUp (0 ), 0 );
34
+ BOOST_CHECK_EQUAL (p1.EvaluateFeeUp (1 ), 10 );
35
+ BOOST_CHECK_EQUAL (p1.EvaluateFeeUp (100000000 ), 1000000000 );
36
+ BOOST_CHECK_EQUAL (p1.EvaluateFeeUp (0x7fffffff ), int64_t (0x7fffffff ) * 10 );
29
37
30
38
FeeFrac neg{-1001 , 100 };
31
- BOOST_CHECK_EQUAL (neg.EvaluateFee (0 ), 0 );
32
- BOOST_CHECK_EQUAL (neg.EvaluateFee (1 ), -11 );
33
- BOOST_CHECK_EQUAL (neg.EvaluateFee (2 ), -21 );
34
- BOOST_CHECK_EQUAL (neg.EvaluateFee (3 ), -31 );
35
- BOOST_CHECK_EQUAL (neg.EvaluateFee (100 ), -1001 );
36
- BOOST_CHECK_EQUAL (neg.EvaluateFee (101 ), -1012 );
37
- BOOST_CHECK_EQUAL (neg.EvaluateFee (100000000 ), -1001000000 );
38
- BOOST_CHECK_EQUAL (neg.EvaluateFee (100000001 ), -1001000011 );
39
- BOOST_CHECK_EQUAL (neg.EvaluateFee (0x7fffffff ), -21496311307 );
39
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (0 ), 0 );
40
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (1 ), -11 );
41
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (2 ), -21 );
42
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (3 ), -31 );
43
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (100 ), -1001 );
44
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (101 ), -1012 );
45
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (100000000 ), -1001000000 );
46
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (100000001 ), -1001000011 );
47
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeDown (0x7fffffff ), -21496311307 );
48
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (0 ), 0 );
49
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (1 ), -10 );
50
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (2 ), -20 );
51
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (3 ), -30 );
52
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (100 ), -1001 );
53
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (101 ), -1011 );
54
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (100000000 ), -1001000000 );
55
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (100000001 ), -1001000010 );
56
+ BOOST_CHECK_EQUAL (neg.EvaluateFeeUp (0x7fffffff ), -21496311306 );
40
57
41
58
BOOST_CHECK (empty == FeeFrac{}); // same as no-args
42
59
@@ -88,15 +105,22 @@ BOOST_AUTO_TEST_CASE(feefrac_operators)
88
105
BOOST_CHECK (oversized_1 << oversized_2);
89
106
BOOST_CHECK (oversized_1 != oversized_2);
90
107
91
- BOOST_CHECK_EQUAL (oversized_1.EvaluateFee (0 ), 0 );
92
- BOOST_CHECK_EQUAL (oversized_1.EvaluateFee (1 ), 1152921 );
93
- BOOST_CHECK_EQUAL (oversized_1.EvaluateFee (2 ), 2305843 );
94
- BOOST_CHECK_EQUAL (oversized_1.EvaluateFee (1548031267 ), 1784758530396540 );
95
-
96
- // Test cases on the threshold where FeeFrac::EvaluateFee start using Mul/Div.
97
- BOOST_CHECK_EQUAL (FeeFrac (0x1ffffffff , 123456789 ).EvaluateFee (98765432 ), 6871947728 );
98
- BOOST_CHECK_EQUAL (FeeFrac (0x200000000 , 123456789 ).EvaluateFee (98765432 ), 6871947729 );
99
- BOOST_CHECK_EQUAL (FeeFrac (0x200000001 , 123456789 ).EvaluateFee (98765432 ), 6871947730 );
108
+ BOOST_CHECK_EQUAL (oversized_1.EvaluateFeeDown (0 ), 0 );
109
+ BOOST_CHECK_EQUAL (oversized_1.EvaluateFeeDown (1 ), 1152921 );
110
+ BOOST_CHECK_EQUAL (oversized_1.EvaluateFeeDown (2 ), 2305843 );
111
+ BOOST_CHECK_EQUAL (oversized_1.EvaluateFeeDown (1548031267 ), 1784758530396540 );
112
+ BOOST_CHECK_EQUAL (oversized_1.EvaluateFeeUp (0 ), 0 );
113
+ BOOST_CHECK_EQUAL (oversized_1.EvaluateFeeUp (1 ), 1152922 );
114
+ BOOST_CHECK_EQUAL (oversized_1.EvaluateFeeUp (2 ), 2305843 );
115
+ BOOST_CHECK_EQUAL (oversized_1.EvaluateFeeUp (1548031267 ), 1784758530396541 );
116
+
117
+ // Test cases on the threshold where FeeFrac::Evaluate start using Mul/Div.
118
+ BOOST_CHECK_EQUAL (FeeFrac (0x1ffffffff , 123456789 ).EvaluateFeeDown (98765432 ), 6871947728 );
119
+ BOOST_CHECK_EQUAL (FeeFrac (0x200000000 , 123456789 ).EvaluateFeeDown (98765432 ), 6871947729 );
120
+ BOOST_CHECK_EQUAL (FeeFrac (0x200000001 , 123456789 ).EvaluateFeeDown (98765432 ), 6871947730 );
121
+ BOOST_CHECK_EQUAL (FeeFrac (0x1ffffffff , 123456789 ).EvaluateFeeUp (98765432 ), 6871947729 );
122
+ BOOST_CHECK_EQUAL (FeeFrac (0x200000000 , 123456789 ).EvaluateFeeUp (98765432 ), 6871947730 );
123
+ BOOST_CHECK_EQUAL (FeeFrac (0x200000001 , 123456789 ).EvaluateFeeUp (98765432 ), 6871947731 );
100
124
101
125
// Tests paths that use double arithmetic
102
126
FeeFrac busted{(static_cast <int64_t >(INT32_MAX)) + 1 , INT32_MAX};
@@ -108,12 +132,18 @@ BOOST_AUTO_TEST_CASE(feefrac_operators)
108
132
BOOST_CHECK (max_fee <= max_fee);
109
133
BOOST_CHECK (max_fee >= max_fee);
110
134
111
- BOOST_CHECK_EQUAL (max_fee.EvaluateFee (0 ), 0 );
112
- BOOST_CHECK_EQUAL (max_fee.EvaluateFee (1 ), 977888 );
113
- BOOST_CHECK_EQUAL (max_fee.EvaluateFee (2 ), 1955777 );
114
- BOOST_CHECK_EQUAL (max_fee.EvaluateFee (3 ), 2933666 );
115
- BOOST_CHECK_EQUAL (max_fee.EvaluateFee (1256796054 ), 1229006664189047 );
116
- BOOST_CHECK_EQUAL (max_fee.EvaluateFee (INT32_MAX), 2100000000000000 );
135
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeDown (0 ), 0 );
136
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeDown (1 ), 977888 );
137
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeDown (2 ), 1955777 );
138
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeDown (3 ), 2933666 );
139
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeDown (1256796054 ), 1229006664189047 );
140
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeDown (INT32_MAX), 2100000000000000 );
141
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeUp (0 ), 0 );
142
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeUp (1 ), 977889 );
143
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeUp (2 ), 1955778 );
144
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeUp (3 ), 2933667 );
145
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeUp (1256796054 ), 1229006664189048 );
146
+ BOOST_CHECK_EQUAL (max_fee.EvaluateFeeUp (INT32_MAX), 2100000000000000 );
117
147
118
148
FeeFrac max_fee2{1 , 1 };
119
149
BOOST_CHECK (max_fee >= max_fee2);
0 commit comments