diff --git a/tests/tests/block_tests.cpp b/tests/tests/block_tests.cpp index c7e3a575..0d31cd17 100644 --- a/tests/tests/block_tests.cpp +++ b/tests/tests/block_tests.cpp @@ -907,4 +907,109 @@ BOOST_FIXTURE_TEST_CASE( witness_scheduler_missed_blocks, database_fixture ) }); } FC_LOG_AND_RETHROW() } +BOOST_FIXTURE_TEST_CASE( rsf_missed_blocks, database_fixture ) +{ + try + { + generate_block(); + + auto rsf = [&]() -> string + { + fc::uint128 rsf = db.get( witness_schedule_id_type() ).recent_slots_filled; + string result = ""; + result.reserve(128); + for( int i=0; i<128; i++ ) + { + result += ((rsf.lo & 1) == 0) ? '0' : '1'; + rsf >>= 1; + } + return result; + }; + + BOOST_CHECK_EQUAL( rsf(), + "1111111111111111111111111111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 1 ); + BOOST_CHECK_EQUAL( rsf(), + "0111111111111111111111111111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 1 ); + BOOST_CHECK_EQUAL( rsf(), + "0101111111111111111111111111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 2 ); + BOOST_CHECK_EQUAL( rsf(), + "0010101111111111111111111111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 3 ); + BOOST_CHECK_EQUAL( rsf(), + "0001001010111111111111111111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 5 ); + BOOST_CHECK_EQUAL( rsf(), + "0000010001001010111111111111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 8 ); + BOOST_CHECK_EQUAL( rsf(), + "0000000010000010001001010111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 13 ); + BOOST_CHECK_EQUAL( rsf(), + "0000000000000100000000100000100010010101111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block(); + BOOST_CHECK_EQUAL( rsf(), + "1000000000000010000000010000010001001010111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block(); + BOOST_CHECK_EQUAL( rsf(), + "1100000000000001000000001000001000100101011111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block(); + BOOST_CHECK_EQUAL( rsf(), + "1110000000000000100000000100000100010010101111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block(); + BOOST_CHECK_EQUAL( rsf(), + "1111000000000000010000000010000010001001010111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 64 ); + BOOST_CHECK_EQUAL( rsf(), + "0000000000000000000000000000000000000000000000000000000000000000" + "1111100000000000001000000001000001000100101011111111111111111111" + ); + + generate_block( ~0, init_account_priv_key, 32 ); + BOOST_CHECK_EQUAL( rsf(), + "0000000000000000000000000000000010000000000000000000000000000000" + "0000000000000000000000000000000001111100000000000001000000001000" + ); + } + FC_LOG_AND_RETHROW() +} + BOOST_AUTO_TEST_SUITE_END()