Add more property based tests for basic bitcoin data structures #14430

pull Christewart wants to merge 2 commits into bitcoin:master from Christewart:add_tests_from_8469 changing 18 files +991 −6
  1. Christewart commented at 2:43 am on October 8, 2018: member

    This is the second half of #12775.

    In general property based testing is a great testing idiom for making sure invariants that you believe about your code hold true under a range of “valid” values.

    This PR includes basic properties for

    1. Keys
    2. Blocks
    3. Bloom Filters
    4. Merkleblocks
    5. Scripts
    6. Transactions

    Currently rapidcheck is not enabled by default on travis – work has been done to enable in #14171 there appears to be a memory access violation in one of the environments.

  2. fanquake added the label Tests on Oct 8, 2018
  3. in src/test/gen/block_gen.h:7 in adeb5e7b87 outdated
    0@@ -0,0 +1,58 @@
    1+#ifndef BITCOIN_TEST_GEN_BLOCK_GEN_H
    2+#define BITCOIN_TEST_GEN_BLOCK_GEN_H
    3+
    4+#include "test/gen/crypto_gen.h"
    5+#include "test/gen/transaction_gen.h"
    6+#include "uint256.h"
    7+#include "primitives/block.h"
    


    MarcoFalke commented at 3:14 am on October 8, 2018:
    Please use bracket syntax includes ("#include <foo.h>") instead of quote syntax includes:
  4. in src/test/gen/crypto_gen.cpp:19 in db8a8c067b outdated
    10@@ -14,6 +11,13 @@
    11 rc::Gen<std::vector<CKey>> MultisigKeys()
    12 {
    13     return rc::gen::suchThat(rc::gen::arbitrary<std::vector<CKey>>(), [](const std::vector<CKey>& keys) {
    14+        //TODO: Investigate why we can only allow 15 keys. Consensus rules
    15+        // dictate we can up to 20 keys
    16+        //https://github.com/bitcoin/bitcoin/blob/10bee0dd4f37eb6cb7a0f1d565fa0fecf8109c35/src/script/script.h#L29
    


    instagibbs commented at 4:37 am on October 8, 2018:
    the wallet has no idea how to make a script using numbers beyond OP_16. Once you do n-of-17 you need a single byte pushing instruction to push the number 17

    Christewart commented at 2:39 am on October 9, 2018:
    I think the original reason for this was actually that more than 15 public keys it was too big of a val to push onto the stack (520 byte limit)
  5. practicalswift commented at 6:10 am on October 8, 2018: contributor

    Concept ACK

    Very nice! Thanks for working on this

  6. Empact commented at 0:41 am on October 9, 2018: member
    Ref #12775 which this builds on.
  7. in src/test/gen/block_gen.h:34 in db8a8c067b outdated
    27+            uint256 hashPrevBlock;
    28+            uint256 hashMerkleRoot;
    29+            uint32_t nTime;
    30+            uint32_t nBits;
    31+            uint32_t nNonce;
    32+            std::tie(nVersion, hashPrevBlock, hashMerkleRoot, nTime, nBits, nNonce) = primitives;
    


    Empact commented at 0:55 am on October 9, 2018:
    Seems you could directly tie into the header fields, to make this more succinct.

    Christewart commented at 2:52 am on October 9, 2018:
    Not sure what you mean about this
  8. Empact commented at 0:58 am on October 9, 2018: member
    How about responding to @MarcoFalke’s suggestions? #12775 (review) #12775 (review)
  9. in src/test/gen/bloom_gen.cpp:27 in db8a8c067b outdated
    19+        assert(result >= 0 && result < 1);
    20+        return result;
    21+    });
    22+}
    23+
    24+rc::Gen<unsigned int> Between1And100()
    


    Empact commented at 0:59 am on October 9, 2018:

    nit: looks like this method is defined with the same name here and in merkleblock_gen.h, how about:

    • applying static more liberally?
    • renaming one or the other?

    Christewart commented at 2:54 am on October 9, 2018:
    So basically mark as static in merkleblock_gen.h and then include that header file and use it here?

    Empact commented at 3:02 am on October 9, 2018:
    Well they have different implementations for different return results. Calling this bloom_gen.cpp implementation static will prevent it from being used outside this file, which would reduce the risk of conflicts and otherwise be appropriate as the method is only used here. I don’t think you want to apply static in the header, as that will result in the function being compiled into every including translation unit. Naming this to not have a potential conflict would also be positive.
  10. in src/test/gen/script_gen.h:12 in db8a8c067b outdated
     7+#include <rapidcheck/Gen.h>
     8+#include <rapidcheck/gen/Numeric.h>
     9+#include <rapidcheck/gen/Container.h>
    10+#include <rapidcheck/gen/Select.h>
    11+
    12+typedef std::pair<CScript, std::vector<CKey>> SPKCKeyPair;
    


    Empact commented at 0:59 am on October 9, 2018:
    nit: using?
  11. Christewart commented at 3:27 am on October 9, 2018: member

    why gen::nonEmpty here?

    I believe blocks, by consensus, are required to have at least one transaction in them (citation needed).

  12. Empact commented at 3:41 am on October 9, 2018: member

    why gen::nonEmpty here?

    I believe blocks, by consensus, are required to have at least one transaction in them (citation needed).

    I believe that’s correct. Relevant check in CheckBlock here: https://github.com/bitcoin/bitcoin/blob/4de0b5f39cc35636d499ad29ee3c63384b13fc76/src/validation.cpp#L3112-L3118

  13. in src/test/gen/bloom_gen.cpp:54 in db8a8c067b outdated
    46+            return std::make_pair(bloomFilter, hashes);
    47+        });
    48+}
    49+
    50+/** Loads an arbitrary bloom filter with the given hashes */
    51+rc::Gen<std::pair<CBloomFilter, std::vector<uint256>>> LoadBloomFilter(const std::vector<uint256>& hashes)
    


    practicalswift commented at 9:21 pm on October 14, 2018:

    Is the presence of LoadBloomFilter auto-detected?

    Same question applies to LoadedBloomFilter, P2SHSPK, P2WSHSPK and SignedTx which all looks like unused functions when taking a naïve look :-)

  14. in src/test/block_properties.cpp:4 in db8a8c067b outdated
    0@@ -0,0 +1,34 @@
    1+#include <boost/test/unit_test.hpp>
    


    practicalswift commented at 9:23 pm on October 14, 2018:

    Needs copyright message :-)

    Applies to all added files in this PR.

  15. in src/test/gen/block_gen.h:57 in db8a8c067b outdated
    52+            block.vtx = refs;
    53+            return block;
    54+        });
    55+    }
    56+};
    57+} //namespace rc
    


    practicalswift commented at 9:24 pm on October 14, 2018:

    // namespace rc to make it consistent with the rest of the project.

    Applies to all files with //namespace in this PR :-)

  16. fanquake commented at 7:00 am on October 20, 2018: member

    Rebooted the tests, as they were still stuck on the initial linting error.

    This would be a good opportunity to address some of the nits left over from #12775, as well as possibly moving to a newer version of rapidcheck, which we can host at https://github.com/bitcoin-core. I bought that up on IRC with @laanwj here.

    We should probably also pull in the depends documentation update from #14171.

    FWIW I updated the PR description to point to #12775 instead of ##8469.

  17. in src/test/gen/block_gen.h:13 in db8a8c067b outdated
     8+
     9+#include <rapidcheck/gen/Arbitrary.h>
    10+#include <rapidcheck/Gen.h>
    11+
    12+
    13+typedef std::tuple<int32_t, uint256, uint256, uint32_t, uint32_t, uint32_t> BlockHeaderTup;
    


    practicalswift commented at 5:40 am on October 24, 2018:
    Nit: Use using instead :-)
  18. in src/test/gen/transaction_gen.h:15 in db8a8c067b outdated
    10+
    11+#include <rapidcheck/gen/Arbitrary.h>
    12+#include <rapidcheck/Gen.h>
    13+#include <rapidcheck/gen/Predicate.h>
    14+
    15+typedef std::tuple<const CTxOut, const CTransaction, const int> SpendingInfo;
    


    practicalswift commented at 5:41 am on October 24, 2018:
    Nit: Use using instead :-)
  19. Christewart commented at 2:05 pm on October 24, 2018: member

    So I tried to adjust our build script that is found here and failed to sift through the cmake weeds.

    It isn’t as trivial as running

    0$ cmake . 
    1$ make install 
    

    since we needs extra functionality located in this package

    https://github.com/bitcoin-core/rapidcheck/tree/master/extras

    specifically the boost_test package. This is what is used to hook into the existing boost testing framework.

    It would be much appreciated if someone who is more adept at cmake commenting about how to properly add that package in extras to have it properly installed in the rapidcheck.mk file.

  20. Empact commented at 10:10 pm on November 8, 2018: member
  21. Christewart commented at 10:13 pm on November 8, 2018: member

    @empact Yes! That is how I hook nicely into the existing boost testing framework.

    What I am currently blocked on is adding that submodule to our ci build. Please see the comment above for details.

    With these proeprties, if they are enabled, you can just run them simply with

    0$ ./test_bitcoin 
    

    since we integrate with boost_test

    EDIT:

    Also I am short on time at the moment so I wont be able to work too much on getting the build stuff to work nicely

  22. Christewart commented at 8:32 pm on November 30, 2018: member

    It looks like there is now an easy configuration option in rapidcheck to allow for the installing of extra/boost_test by setting a simple configuration option:

    https://github.com/emil-e/rapidcheck/issues/222#issuecomment-443259105

    We will need to update the rapidcheck dependency to at least https://github.com/emil-e/rapidcheck/commit/5f0eb302f28979395a070bbdfde1f6d4cad94409

  23. fanquake commented at 5:17 am on December 1, 2018: member

    @Christewart I’ve made an attempt to use the new install flags in #14853.

    When I merge these changes on top of that PR (using the new rapidcheck) I’m seeing some compilation errors. This is on a macOS 10.14.1 machine, using Xcode 10.1 (10B61):

     0In file included from test/gen/transaction_gen.cpp:1:
     1In file included from ./test/gen/transaction_gen.h:4:
     2In file included from ./test/gen/crypto_gen.h:4:
     3In file included from ./key.h:10:
     4In file included from ./pubkey.h:10:
     5In file included from ./hash.h:11:
     6In file included from ./crypto/sha256.h:10:
     7In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:477:
     8In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string_view:176:
     9In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__string:56:
    10In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:643:
    11In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/memory:662:
    12/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:227:10: error: static_assert failed due to requirement '__can_bind_reference<std::__1::vector<CTxIn, std::__1::allocator<CTxIn> > >()' "Attempted to construct a reference element in a tuple with an rvalue"
    13        {static_assert(__can_bind_reference<_Tp>(),
    14         ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    15/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:411:15: note: in instantiation of function template specialization 'std::__1::__tuple_leaf<1, const std::__1::vector<CTxIn, std::__1::allocator<CTxIn> > &, false>::__tuple_leaf<std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, void>' requested here
    16            : __tuple_leaf<_Indx, _Tp>(_VSTD::forward<typename tuple_element<_Indx,
    17              ^
    18/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:828:15: note: in instantiation of function template specialization 'std::__1::__tuple_impl<std::__1::__tuple_indices<0, 1, 2, 3>, int, const std::__1::vector<CTxIn, std::__1::allocator<CTxIn> > &, const std::__1::vector<CTxOut, std::__1::allocator<CTxOut> > &, unsigned int>::__tuple_impl<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, void>' requested here
    19            : __base_(_VSTD::forward<_Tuple>(__t)) {}
    20              ^
    21/Users/michael/github/bitcoin/depends/x86_64-apple-darwin18.2.0/share/../include/rapidcheck/shrinkable/Transform.hpp:20:37: note: in instantiation of function template specialization 'std::__1::tuple<int, const std::__1::vector<CTxIn, std::__1::allocator<CTxIn> > &, const std::__1::vector<CTxOut, std::__1::allocator<CTxOut> > &, unsigned int>::tuple<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, false>' requested here
    22  U value() const { return m_mapper(m_shrinkable.value()); }
    23                                    ^
    24/Users/michael/github/bitcoin/depends/x86_64-apple-darwin18.2.0/share/../include/rapidcheck/Shrinkable.hpp:26:44: note: in instantiation of member function 'rc::shrinkable::detail::MapShrinkable<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, (lambda at ./test/gen/transaction_gen.h:97:13)>::value' requested here
    25  T value() const override { return m_impl.value(); }
    26                                           ^
    27/Users/michael/github/bitcoin/depends/x86_64-apple-darwin18.2.0/share/../include/rapidcheck/Shrinkable.hpp:22:12: note: in instantiation of member function 'rc::Shrinkable<CTransaction>::ShrinkableImpl<rc::shrinkable::detail::MapShrinkable<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, (lambda at ./test/gen/transaction_gen.h:97:13)> >::value' requested here
    28  explicit ShrinkableImpl(Args &&... args)
    29           ^
    30/Users/michael/github/bitcoin/depends/x86_64-apple-darwin18.2.0/share/../include/rapidcheck/Shrinkable.hpp:101:27: note: (skipping 3 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
    31  shrinkable.m_impl = new ShrinkableImpl(std::forward<Args>(args)...);
    32                          ^
    33/Users/michael/github/bitcoin/depends/x86_64-apple-darwin18.2.0/share/../include/rapidcheck/Gen.hpp:39:12: note: in instantiation of member function 'rc::gen::detail::MapGen<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, (lambda at ./test/gen/transaction_gen.h:97:13)>::operator()' requested here
    34    return m_impl(random, size);
    35           ^
    36/Users/michael/github/bitcoin/depends/x86_64-apple-darwin18.2.0/share/../include/rapidcheck/Gen.hpp:34:3: note: in instantiation of member function 'rc::Gen<CTransaction>::GenImpl<rc::gen::detail::MapGen<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, (lambda at ./test/gen/transaction_gen.h:97:13)> >::generate' requested here
    37  GenImpl(Args &&... args)
    38  ^
    39/Users/michael/github/bitcoin/depends/x86_64-apple-darwin18.2.0/share/../include/rapidcheck/Gen.hpp:58:18: note: in instantiation of function template specialization 'rc::Gen<CTransaction>::GenImpl<rc::gen::detail::MapGen<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, (lambda at ./test/gen/transaction_gen.h:97:13)> >::GenImpl<rc::gen::detail::MapGen<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, (lambda at ./test/gen/transaction_gen.h:97:13)> >' requested here
    40    : m_impl(new GenImpl<Decay<Impl>>(std::forward<Impl>(impl))) {}
    41                 ^
    42/Users/michael/github/bitcoin/depends/x86_64-apple-darwin18.2.0/share/../include/rapidcheck/gen/Transform.hpp:78:10: note: in instantiation of function template specialization 'rc::Gen<CTransaction>::Gen<rc::gen::detail::MapGen<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, (lambda at ./test/gen/transaction_gen.h:97:13)>, void>' requested here
    43  return detail::MapGen<T, Decay<Mapper>>(std::move(gen),
    44         ^
    45./test/gen/transaction_gen.h:95:21: note: in instantiation of function template specialization 'rc::gen::map<std::__1::tuple<int, std::__1::vector<CTxIn, std::__1::allocator<CTxIn> >, std::__1::vector<CTxOut, std::__1::allocator<CTxOut> >, unsigned int>, (lambda at ./test/gen/transaction_gen.h:97:13)>' requested here
    46        return gen::map(gen::tuple(gen::arbitrary<int32_t>(),
    

    The entire build output is available here.

  24. MarcoFalke referenced this in commit 2c364fde42 on Apr 2, 2019
  25. fanquake commented at 10:33 am on April 3, 2019: member
    @Christewart Could you rebase this, now that #14853 has been merged?
  26. DrahtBot added the label Needs rebase on Apr 17, 2019
  27. Christewart force-pushed on Apr 17, 2019
  28. Christewart commented at 8:22 pm on April 17, 2019: member

    Rebased this branch, but i am getting a new error when running these tests locally. This doesn’t seem related to my PR AFAICT

    0chris@chris:~/dev/bitcoin/src/test$ ./test_bitcoin
    1Running 365 test cases...
    2Using configuration: seed=16472686160129483926
    3Error: Specified -walletdir "/tmp/test_common_Bitcoin Core/1555532449_497584857/tempdir/path_does_not_exist" does not exist
    4Error: Specified -walletdir "/tmp/test_common_Bitcoin Core/1555532449_512688440/tempdir/not_a_directory.dat" is not a directory
    5Error: Specified -walletdir "wallets" is a relative path
    
  29. practicalswift commented at 8:31 pm on April 17, 2019: contributor
    @Christewart Yes, those annoying errors are unrelated: see discussion in #15352 :-)
  30. DrahtBot removed the label Needs rebase on Apr 18, 2019
  31. in src/test/bloom_properties.cpp:1 in 48740ba623 outdated
    0@@ -0,0 +1,35 @@
    1+// Copyright (c) 2012-2016 The Bitcoin Core developers
    


    fanquake commented at 2:58 am on July 29, 2019:
    You can just use 2019 here
  32. in src/test/gen/crypto_gen.cpp:4 in 48740ba623 outdated
    0@@ -1,6 +1,3 @@
    1-// Copyright (c) 2018 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.
    4 #include <test/gen/crypto_gen.h>
    


    fanquake commented at 3:00 am on July 29, 2019:
    Please put this back. Same in the .h.
  33. fanquake commented at 3:12 am on July 29, 2019: member

    @Christewart Do you have time to continue with this RapidCheck test work going forward? If so, could you rebase this on master (to pull in a build fix), address outstanding nits and squash your commits etc.

    I checked this out and ran the tests. For some reason I thought I had (or used to have?) rapidcheck installed via brew, but it doesn’t seem to be available from there at the moment.

    I’m wondering what the state of the RapidCheck project is, as the repo hasn’t seen any activity for 6 months, and the author seems to have gone quiet on GitHub. There are a few issues as well as PRs piling up on that repo.

  34. jonatack commented at 8:38 am on July 29, 2019: member
    @fanquake I wrote @Christewart about this PR 3 days ago and he might have some time this week.
  35. Add more property based tests for basic bitcoin data structures 7d1b670eb3
  36. Christewart force-pushed on Jul 29, 2019
  37. Christewart commented at 1:58 pm on July 29, 2019: member

    So i rebased onto master, and fixed various things that needed to be fixed with API changes in master.

    Do you have time to continue with this RapidCheck test work going forward? If so, could you rebase this on master (to pull in a build fix), address outstanding nits and squash your commits etc.

    I’m wondering what the state of the RapidCheck project is, as the repo hasn’t seen any activity for 6 months, and the author seems to have gone quiet on GitHub. There are a few issues as well as PRs piling up on that repo.

    I think this is concerning as well, I do not have the time or know how to maintain rapidcheck itself. I see you have an issue on the repo about keeping rapidcheck working with newer versions of gcc, and it hasn’t been answered which is concerning.

    I checked this out and ran the tests. For some reason I thought I had (or used to have?) rapidcheck installed via brew, but it doesn’t seem to be available from there at the moment.

    I don’t think rapidcheck can be installed with brew (admittedly, I don’t have a mac). I think you need to do

     0rapidcheck $ cmake . && make install
     1-- Configuring done
     2-- Generating done
     3-- Build files have been written to: /home/chris/dev/rapidcheck
     4[100%] Built target rapidcheck
     5Install the project...
     6-- Install configuration: ""
     7-- Up-to-date: /usr/local/lib/librapidcheck.a
     8-- Up-to-date: /usr/local/include
     9-- Up-to-date: /usr/local/include/rapidcheck.h
    10-- Up-to-date: /usr/local/include/rapidcheck
    11....
    12-- Up-to-date: /usr/local/include
    13-- Up-to-date: /usr/local/include/rapidcheck
    14-- Up-to-date: /usr/local/include/rapidcheck/boost_test.h
    
  38. in src/Makefile.test.include:156 in 330465c01c outdated
    152@@ -153,11 +153,25 @@ BITCOIN_TESTS =\
    153 
    154 if ENABLE_PROPERTY_TESTS
    155 BITCOIN_TESTS += \
    156-  test/key_properties.cpp
    157+  test/block_properties.cpp \
    


    jonatack commented at 11:25 am on August 17, 2019:
    nit: could update “2013-2016” in this file’s copyright header
  39. jonatack commented at 11:46 am on August 17, 2019: member

    Concept ACK, approach ACK. Built and ran all tests successfully, both this branch and also rebased on latest master, with Linux Debian and a fresh build of RapidCheck on master at https://github.com/emil-e/rapidcheck/commit/d9482c683429fe79122e3dcab14c9655874aeb8e.

     0  CXX      test/gen/test_bitcoin-block_gen.o
     1  CXX      test/gen/test_bitcoin-bloom_gen.o
     2  CXX      test/gen/test_bitcoin-crypto_gen.o
     3  CXX      test/gen/test_bitcoin-script_gen.o
     4  CXX      test/gen/test_bitcoin-transaction_gen.o
     5
     6[...]
     7
     8  CXX      test/test_bitcoin-block_properties.o
     9  CXX      test/test_bitcoin-bloom_properties.o
    10  CXX      test/test_bitcoin-key_properties.o
    11  CXX      test/test_bitcoin-merkleblock_properties.o
    12  CXX      test/test_bitcoin-script_properties.o
    13  CXX      test/test_bitcoin-transaction_properties.o
    14
    15[...]
    16
    17Running tests: block_properties from test/block_properties.cpp
    18Running tests: bloom_properties from test/bloom_properties.cpp
    19Running tests: key_properties from test/key_properties.cpp
    20Running tests: merkleblock_properties from test/merkleblock_properties.cpp
    21Running tests: script_properties from test/script_properties.cpp
    22Running tests: transaction_properties from test/transaction_properties.cpp
    

    @Christewart could you put this PR into final ACK-ready form? I’m guessing multiple commits for the different tests or Makefile changes would probably be fine (given the work put into it) but would be good to squash the linter, typo, rebase, and clang commits.

    Rapidcheck build aspects could be addressed in a separate PR as this one concentrates on adding tests.

    Note that Rapidcheck has recently seen a bit of renewed maintainer activity, though afaik https://github.com/emil-e/rapidcheck/issues/232 filed by @fanquake hasn’t been addressed yet.

  40. try to make linter happy
    fix typo in Makefile.test.include
    
    rebase and redo imports
    
    Rebase onto master, fix compile erros with various API changes in master, address nits
    
    Run clang-format-diff.py
    
    Add missing copyright header
    92c08f56bf
  41. Christewart force-pushed on Aug 19, 2019
  42. Christewart commented at 10:51 am on August 20, 2019: member
    @jonatack I think everything is good to go now?
  43. Christewart closed this on Apr 3, 2020

  44. fanquake commented at 11:32 am on April 3, 2020: member
    Closing this in light of #18514.
  45. DrahtBot locked this on Feb 15, 2022

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-07-05 22:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me