29 #include "gtest/gtest.h" 36 #include "blockchain_db/testdb.h" 38 static const uint64_t test_distribution[32] = {
39 0, 0, 0, 0, 0, 1, 5, 1, 4, 0, 0, 1, 0, 1, 2, 3, 1, 0, 2, 0, 1, 3, 8, 1, 3, 5, 7, 1, 5, 0, 2, 3
41 static const size_t test_distribution_size =
sizeof(test_distribution) /
sizeof(test_distribution[0]);
46 class TestDB:
public cryptonote::BaseTestDB
49 TestDB(
size_t bc_height = test_distribution_size): blockchain_height(bc_height) { m_open =
true; }
50 virtual uint64_t height()
const override {
return blockchain_height; }
52 std::vector<uint64_t> get_block_cumulative_rct_outputs(
const std::vector<uint64_t> &heights)
const override 54 std::vector<uint64_t> d;
59 c += test_distribution[i];
65 std::vector<uint64_t> get_block_weights(
uint64_t start_offset,
size_t count)
const override 67 std::vector<uint64_t> weights;
68 while (
count--) weights.push_back(1);
79 std::unique_ptr<cryptonote::Blockchain> bc;
83 const std::pair<uint8_t, uint64_t>
hard_forks[2];
101 TEST(output_distribution, extend)
103 boost::optional<cryptonote::rpc::output_distribution_data>
res;
108 ASSERT_EQ(
res->distribution, std::vector<uint64_t>({5, 0}));
113 ASSERT_EQ(
res->distribution, std::vector<uint64_t>({55, 55}));
118 ASSERT_EQ(
res->distribution, std::vector<uint64_t>({5, 0, 2}));
123 ASSERT_EQ(
res->distribution, std::vector<uint64_t>({55, 55, 57}));
128 ASSERT_EQ(
res->distribution, std::vector<uint64_t>({5, 0, 2, 3}));
133 ASSERT_EQ(
res->distribution, std::vector<uint64_t>({55, 55, 57, 60}));
138 boost::optional<cryptonote::rpc::output_distribution_data>
res;
146 TEST(output_distribution, full_cumulative)
148 boost::optional<cryptonote::rpc::output_distribution_data>
res;
156 TEST(output_distribution, full_noncumulative)
158 boost::optional<cryptonote::rpc::output_distribution_data>
res;
163 for (
size_t i = 0; i < 32; ++i)
167 TEST(output_distribution, part_cumulative)
169 boost::optional<cryptonote::rpc::output_distribution_data>
res;
174 ASSERT_EQ(
res->distribution, std::vector<uint64_t>({0, 1, 6, 7, 11}));
177 TEST(output_distribution, part_noncumulative)
179 boost::optional<cryptonote::rpc::output_distribution_data>
res;
184 ASSERT_EQ(
res->distribution, std::vector<uint64_t>({0, 1, 5, 1, 4}));
#define ASSERT_EQ(val1, val2)
mdb_size_t count(MDB_cursor *cur)
const std::pair< uint8_t, uint64_t > hard_forks[2]
bool get_output_distribution(uint64_t amount, uint64_t from_height, uint64_t to_height, uint64_t &start_height, std::vector< uint64_t > &distribution, uint64_t &base) const
gets per block distribution of outputs of a given amount
unsigned __int64 uint64_t
Transaction pool, handles transactions which are not part of a block.
TEST(output_distribution, extend)
#define ASSERT_TRUE(condition)
const cryptonote::test_options test_options
bool init(BlockchainDB *db, const network_type nettype=MAINNET, bool offline=false, const cryptonote::test_options *test_options=NULL, difficulty_type fixed_difficulty=0, const GetCheckpointsCallback &get_checkpoints=nullptr, bool ignore_bsig=false, bool fallback_to_pow=false)
Initialize the Blockchain state.
bool get_output_distribution(uint64_t amount, uint64_t from, uint64_t to, uint64_t &start_height, std::vector< uint64_t > &distribution, uint64_t &base)
crypto::hash get_block_hash(uint64_t height)
static boost::optional< output_distribution_data > get_output_distribution(const std::function< bool(uint64_t, uint64_t, uint64_t, uint64_t &, std::vector< uint64_t > &, uint64_t &)> &f, uint64_t amount, uint64_t from_height, uint64_t to_height, const std::function< crypto::hash(uint64_t)> &get_hash, bool cumulative, uint64_t blockchain_height)