merkleblock_tests.cpp raw
1 // Copyright (c) 2012-2021 The Limenka developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #include <merkleblock.h>
6 #include <test/util/setup_common.h>
7 #include <uint256.h>
8
9 #include <boost/test/unit_test.hpp>
10
11 #include <set>
12 #include <vector>
13
14 BOOST_AUTO_TEST_SUITE(merkleblock_tests)
15
16 /**
17 * Create a CMerkleBlock using a list of txids which will be found in the
18 * given block.
19 */
20 BOOST_AUTO_TEST_CASE(merkleblock_construct_from_txids_found)
21 {
22 CBlock block = getBlock13b8a();
23
24 std::set<Txid> txids;
25
26 // Last txn in block.
27 Txid txhash1{Txid::FromHex("74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20").value()};
28
29 // Second txn in block.
30 Txid txhash2{Txid::FromHex("f9fc751cb7dc372406a9f8d738d5e6f8f63bab71986a39cf36ee70ee17036d07").value()};
31
32 txids.insert(txhash1);
33 txids.insert(txhash2);
34
35 CMerkleBlock merkleBlock(block, txids);
36
37 BOOST_CHECK_EQUAL(merkleBlock.header.GetHash().GetHex(), block.GetHash().GetHex());
38
39 // vMatchedTxn is only used when bloom filter is specified.
40 BOOST_CHECK_EQUAL(merkleBlock.vMatchedTxn.size(), 0U);
41
42 std::vector<uint256> vMatched;
43 std::vector<unsigned int> vIndex;
44
45 BOOST_CHECK_EQUAL(merkleBlock.txn.ExtractMatches(vMatched, vIndex).GetHex(), block.hashMerkleRoot.GetHex());
46 BOOST_CHECK_EQUAL(vMatched.size(), 2U);
47
48 // Ordered by occurrence in depth-first tree traversal.
49 BOOST_CHECK_EQUAL(vMatched[0].ToString(), txhash2.ToString());
50 BOOST_CHECK_EQUAL(vIndex[0], 1U);
51
52 BOOST_CHECK_EQUAL(vMatched[1].ToString(), txhash1.ToString());
53 BOOST_CHECK_EQUAL(vIndex[1], 8U);
54 }
55
56
57 /**
58 * Create a CMerkleBlock using a list of txids which will not be found in the
59 * given block.
60 */
61 BOOST_AUTO_TEST_CASE(merkleblock_construct_from_txids_not_found)
62 {
63 CBlock block = getBlock13b8a();
64
65 std::set<Txid> txids2;
66 txids2.insert(Txid::FromHex("c0ffee00003bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20").value());
67 CMerkleBlock merkleBlock(block, txids2);
68
69 BOOST_CHECK_EQUAL(merkleBlock.header.GetHash().GetHex(), block.GetHash().GetHex());
70 BOOST_CHECK_EQUAL(merkleBlock.vMatchedTxn.size(), 0U);
71
72 std::vector<uint256> vMatched;
73 std::vector<unsigned int> vIndex;
74
75 BOOST_CHECK_EQUAL(merkleBlock.txn.ExtractMatches(vMatched, vIndex).GetHex(), block.hashMerkleRoot.GetHex());
76 BOOST_CHECK_EQUAL(vMatched.size(), 0U);
77 BOOST_CHECK_EQUAL(vIndex.size(), 0U);
78 }
79
80 BOOST_AUTO_TEST_SUITE_END()
81