300 lcg_seed = bc->get_db().height();
303 uint64_t ltw = bc->get_next_long_term_block_weight(w);
304 bc->get_db().add_block(std::make_pair(
cryptonote::block(),
""), w, ltw, h, h, {});
305 ASSERT_TRUE(bc->update_next_cumulative_weight_limit());
308 for (
int n = 0; n < 1000; ++n)
311 int remove = 1 + (n * 17) % 8;
312 int add = (n * 23) % 123;
315 uint64_t old_ltbw[16], h0 = bc->get_db().height() -
remove - 1;
316 for (
int i = -2; i <
remove; ++i)
318 old_ltbw[i + 2] = bc->get_db().get_block_long_term_weight(h0 + i);
321 for (
int i = 0; i <
remove; ++i)
324 std::vector<cryptonote::transaction> txs;
325 bc->get_db().pop_block(b, txs);
326 ASSERT_TRUE(bc->update_next_cumulative_weight_limit());
327 const uint64_t effective_median = bc->get_current_cumulative_block_weight_median();
328 const uint64_t effective_limit = bc->get_current_cumulative_block_weight_limit();
329 ASSERT_TRUE(bc->update_next_cumulative_weight_limit());
330 ASSERT_EQ(effective_median, bc->get_current_cumulative_block_weight_median());
331 ASSERT_EQ(effective_limit, bc->get_current_cumulative_block_weight_limit());
333 for (
int i = 0; i < add; ++i)
335 lcg_seed = bc->get_db().height();
338 uint64_t ltw = bc->get_next_long_term_block_weight(w);
339 bc->get_db().add_block(std::make_pair(
cryptonote::block(),
""), w, ltw, bc->get_db().height(), bc->get_db().height(), {});
340 ASSERT_TRUE(bc->update_next_cumulative_weight_limit());
341 const uint64_t effective_median = bc->get_current_cumulative_block_weight_median();
342 const uint64_t effective_limit = bc->get_current_cumulative_block_weight_limit();
343 ASSERT_TRUE(bc->update_next_cumulative_weight_limit());
344 ASSERT_EQ(effective_median, bc->get_current_cumulative_block_weight_median());
345 ASSERT_EQ(effective_limit, bc->get_current_cumulative_block_weight_limit());
349 for (
int i = -2; i < std::min(add,
remove); ++i)
351 ASSERT_EQ(bc->get_db().get_block_long_term_weight(h0 + i), old_ltbw[i + 2]);
#define CRYPTONOTE_BLOCK_GRANTED_FULL_REWARD_ZONE_V8
#define ASSERT_EQ(val1, val2)
#define HF_VERSION_LONG_TERM_BLOCK_WEIGHT
#define PREFIX(hf_version)
unsigned __int64 uint64_t
#define TEST_LONG_TERM_BLOCK_WEIGHT_WINDOW
#define ASSERT_TRUE(condition)