Switch blocks to a constant-space Merkle root/branch algorithm.
[bitcoinplatinum.git] / src / test / main_tests.cpp
blob2b92d239e90ec204df7115b5dd0eca3a5d45d82c
1 // Copyright (c) 2014 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 #include "chainparams.h"
6 #include "main.h"
8 #include "test/test_bitcoin.h"
10 #include <boost/signals2/signal.hpp>
11 #include <boost/test/unit_test.hpp>
13 BOOST_FIXTURE_TEST_SUITE(main_tests, TestingSetup)
15 static void TestBlockSubsidyHalvings(const Consensus::Params& consensusParams)
17 int maxHalvings = 64;
18 CAmount nInitialSubsidy = 50 * COIN;
20 CAmount nPreviousSubsidy = nInitialSubsidy * 2; // for height == 0
21 BOOST_CHECK_EQUAL(nPreviousSubsidy, nInitialSubsidy * 2);
22 for (int nHalvings = 0; nHalvings < maxHalvings; nHalvings++) {
23 int nHeight = nHalvings * consensusParams.nSubsidyHalvingInterval;
24 CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams);
25 BOOST_CHECK(nSubsidy <= nInitialSubsidy);
26 BOOST_CHECK_EQUAL(nSubsidy, nPreviousSubsidy / 2);
27 nPreviousSubsidy = nSubsidy;
29 BOOST_CHECK_EQUAL(GetBlockSubsidy(maxHalvings * consensusParams.nSubsidyHalvingInterval, consensusParams), 0);
32 static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval)
34 Consensus::Params consensusParams;
35 consensusParams.nSubsidyHalvingInterval = nSubsidyHalvingInterval;
36 TestBlockSubsidyHalvings(consensusParams);
39 BOOST_AUTO_TEST_CASE(block_subsidy_test)
41 TestBlockSubsidyHalvings(Params(CBaseChainParams::MAIN).GetConsensus()); // As in main
42 TestBlockSubsidyHalvings(150); // As in regtest
43 TestBlockSubsidyHalvings(1000); // Just another interval
46 BOOST_AUTO_TEST_CASE(subsidy_limit_test)
48 const Consensus::Params& consensusParams = Params(CBaseChainParams::MAIN).GetConsensus();
49 CAmount nSum = 0;
50 for (int nHeight = 0; nHeight < 14000000; nHeight += 1000) {
51 CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams);
52 BOOST_CHECK(nSubsidy <= 50 * COIN);
53 nSum += nSubsidy * 1000;
54 BOOST_CHECK(MoneyRange(nSum));
56 BOOST_CHECK_EQUAL(nSum, 2099999997690000ULL);
59 bool ReturnFalse() { return false; }
60 bool ReturnTrue() { return true; }
62 BOOST_AUTO_TEST_CASE(test_combiner_all)
64 boost::signals2::signal<bool (), CombinerAll> Test;
65 BOOST_CHECK(Test());
66 Test.connect(&ReturnFalse);
67 BOOST_CHECK(!Test());
68 Test.connect(&ReturnTrue);
69 BOOST_CHECK(!Test());
70 Test.disconnect(&ReturnFalse);
71 BOOST_CHECK(Test());
72 Test.disconnect(&ReturnTrue);
73 BOOST_CHECK(Test());
75 BOOST_AUTO_TEST_SUITE_END()