32 #include "gtest/gtest.h" 46 bool m_block_not_too_big;
51 #define TEST_ALREADY_GENERATED_COINS(already_generated_coins, expected_reward) \ 52 median = (already_generated_coins == 2002716) ? 1 : 0; \ 53 m_block_not_too_big = get_block_reward(median, current_block_weight, already_generated_coins, m_block_reward,1,0); \ 54 ASSERT_TRUE(m_block_not_too_big); \ 55 ASSERT_EQ(m_block_reward, expected_reward); 57 TEST_F(block_reward_and_already_generated_coins, handles_first_values)
71 TEST_F(block_reward_and_already_generated_coins, correctly_steps_from_2_to_1)
78 TEST_F(block_reward_and_already_generated_coins, handles_max)
91 m_block_not_too_big =
get_block_reward(0, 0, already_generated_coins, m_standard_block_reward, 1, 0);
96 void do_test(
size_t median_block_weight,
size_t current_block_weight)
98 m_block_not_too_big =
get_block_reward(median_block_weight, current_block_weight, already_generated_coins, m_block_reward, 1, 0);
101 static const uint64_t already_generated_coins = 1260000000000;
103 bool m_block_not_too_big;
108 TEST_F(block_reward_and_current_block_weight, handles_block_weight_less_relevance_level)
112 ASSERT_EQ(m_block_reward, m_standard_block_reward);
115 TEST_F(block_reward_and_current_block_weight, handles_block_weight_eq_relevance_level)
119 ASSERT_EQ(m_block_reward, m_standard_block_reward);
122 TEST_F(block_reward_and_current_block_weight, handles_block_weight_gt_relevance_level)
126 ASSERT_LT(m_block_reward, m_standard_block_reward);
129 TEST_F(block_reward_and_current_block_weight, handles_block_weight_less_2_relevance_level)
133 ASSERT_LT(m_block_reward, m_standard_block_reward);
137 TEST_F(block_reward_and_current_block_weight, handles_block_weight_eq_2_relevance_level)
144 TEST_F(block_reward_and_current_block_weight, handles_block_weight_gt_2_relevance_level)
150 #ifdef __x86_64__ // For 64-bit systems only, because block size is limited to size_t. 151 TEST_F(block_reward_and_current_block_weight, fails_on_huge_median_size)
154 size_t huge_size = std::numeric_limits<uint32_t>::max() +
UINT64_C(2);
155 ASSERT_DEATH(do_test(huge_size, huge_size + 1),
"");
159 TEST_F(block_reward_and_current_block_weight, fails_on_huge_block_weight)
162 size_t huge_size = std::numeric_limits<uint32_t>::max() +
UINT64_C(2);
163 ASSERT_DEATH(do_test(huge_size - 2, huge_size),
"");
187 void do_test(
size_t current_block_weight)
192 static const uint64_t already_generated_coins = 1260000000000;
194 std::vector<size_t> m_last_block_weights;
195 uint64_t m_last_block_weights_median;
196 bool m_block_not_too_big;
201 TEST_F(block_reward_and_last_block_weights, handles_block_weight_less_median)
203 do_test(m_last_block_weights_median - 1);
205 ASSERT_EQ(m_block_reward, m_standard_block_reward);
208 TEST_F(block_reward_and_last_block_weights, handles_block_weight_eq_median)
210 do_test(m_last_block_weights_median);
212 ASSERT_EQ(m_block_reward, m_standard_block_reward);
215 TEST_F(block_reward_and_last_block_weights, handles_block_weight_gt_median)
217 do_test(m_last_block_weights_median + 1);
219 ASSERT_LT(m_block_reward, m_standard_block_reward);
222 TEST_F(block_reward_and_last_block_weights, handles_block_weight_less_2_medians)
224 do_test(2 * m_last_block_weights_median - 1);
226 ASSERT_LT(m_block_reward, m_standard_block_reward);
230 TEST_F(block_reward_and_last_block_weights, handles_block_weight_eq_2_medians)
232 do_test(2 * m_last_block_weights_median);
237 TEST_F(block_reward_and_last_block_weights, handles_block_weight_gt_2_medians)
239 do_test(2 * m_last_block_weights_median + 1);
243 TEST_F(block_reward_and_last_block_weights, calculates_correctly)
245 ASSERT_EQ(0, m_last_block_weights_median % 8);
247 do_test(m_last_block_weights_median * 9 / 8);
249 ASSERT_EQ(m_block_reward, m_standard_block_reward * 63 / 64);
252 do_test(m_last_block_weights_median * 3 / 2);
254 ASSERT_EQ(m_block_reward, m_standard_block_reward * 3 / 4);
256 do_test(m_last_block_weights_median * 15 / 8);
258 ASSERT_EQ(m_block_reward, m_standard_block_reward * 15 / 64);
#define TEST_ALREADY_GENERATED_COINS(already_generated_coins, expected_reward)
#define ASSERT_FALSE(condition)
Holds cryptonote related classes and helpers.
#define ASSERT_EQ(val1, val2)
unsigned __int64 uint64_t
#define ASSERT_LT(val1, val2)
type_vec_type median(std::vector< type_vec_type > &v)
#define TEST_F(test_fixture, test_name)
#define ASSERT_TRUE(condition)
#define FINAL_SUBSIDY_PER_MINUTE
bool get_block_reward(size_t median_weight, size_t current_block_weight, uint64_t already_generated_coins, uint64_t &reward, uint8_t version, uint64_t current_block_height, network_type nettype)
#define CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V1