mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-09 15:37:00 -04:00

4defdfab94
[MOVEONLY] Move unused Merkle branch code to tests (Pieter Wuille)4437d6e1f3
8-way AVX2 implementation for double SHA256 on 64-byte inputs (Pieter Wuille)230294bf5f
4-way SSE4.1 implementation for double SHA256 on 64-byte inputs (Pieter Wuille)1f0e7ca09c
Use SHA256D64 in Merkle root computation (Pieter Wuille)d0c9632883
Specialized double sha256 for 64 byte inputs (Pieter Wuille)57f34630fb
Refactor SHA256 code (Pieter Wuille)0df017889b
Benchmark Merkle root computation (Pieter Wuille) Pull request description: This introduces a framework for specialized double-SHA256 with 64 byte inputs. 4 different implementations are provided: * Generic C++ (reusing the normal SHA256 code) * Specialized C++ for 64-byte inputs, but no special instructions * 4-way using SSE4.1 intrinsics * 8-way using AVX2 intrinsics On my own system (AVX2 capable), I get these benchmarks for computing the Merkle root of 9001 leaves (supported lengths / special instructions / parallellism): * 7.2 ms with varsize/naive/1way (master, non-SSE4 hardware) * 5.8 ms with size64/naive/1way (this PR, non-SSE4 capable systems) * 4.8 ms with varsize/SSE4/1way (master, SSE4 hardware) * 2.9 ms with size64/SSE4/4way (this PR, SSE4 hardware) * 1.1 ms with size64/AVX2/8way (this PR, AVX2 hardware) Tree-SHA512: efa32d48b32820d9ce788ead4eb583949265be8c2e5f538c94bc914e92d131a57f8c1ee26c6f998e81fb0e30675d4e2eddc3360bcf632676249036018cff343e
183 lines
5.8 KiB
Text
183 lines
5.8 KiB
Text
# Copyright (c) 2013-2016 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
bin_PROGRAMS += test/test_bitcoin
|
|
noinst_PROGRAMS += test/test_bitcoin_fuzzy
|
|
TEST_SRCDIR = test
|
|
TEST_BINARY=test/test_bitcoin$(EXEEXT)
|
|
|
|
JSON_TEST_FILES = \
|
|
test/data/base58_encode_decode.json \
|
|
test/data/key_io_valid.json \
|
|
test/data/key_io_invalid.json \
|
|
test/data/script_tests.json \
|
|
test/data/sighash.json \
|
|
test/data/tx_invalid.json \
|
|
test/data/tx_valid.json
|
|
|
|
RAW_TEST_FILES =
|
|
|
|
GENERATED_TEST_FILES = $(JSON_TEST_FILES:.json=.json.h) $(RAW_TEST_FILES:.raw=.raw.h)
|
|
|
|
BITCOIN_TEST_SUITE = \
|
|
test/test_bitcoin_main.cpp \
|
|
test/test_bitcoin.h \
|
|
test/test_bitcoin.cpp
|
|
|
|
# test_bitcoin binary #
|
|
BITCOIN_TESTS =\
|
|
test/arith_uint256_tests.cpp \
|
|
test/scriptnum10.h \
|
|
test/addrman_tests.cpp \
|
|
test/amount_tests.cpp \
|
|
test/allocator_tests.cpp \
|
|
test/base32_tests.cpp \
|
|
test/base58_tests.cpp \
|
|
test/base64_tests.cpp \
|
|
test/bech32_tests.cpp \
|
|
test/bip32_tests.cpp \
|
|
test/blockchain_tests.cpp \
|
|
test/blockencodings_tests.cpp \
|
|
test/bloom_tests.cpp \
|
|
test/bswap_tests.cpp \
|
|
test/checkqueue_tests.cpp \
|
|
test/coins_tests.cpp \
|
|
test/compress_tests.cpp \
|
|
test/crypto_tests.cpp \
|
|
test/cuckoocache_tests.cpp \
|
|
test/DoS_tests.cpp \
|
|
test/getarg_tests.cpp \
|
|
test/hash_tests.cpp \
|
|
test/key_io_tests.cpp \
|
|
test/key_tests.cpp \
|
|
test/limitedmap_tests.cpp \
|
|
test/dbwrapper_tests.cpp \
|
|
test/main_tests.cpp \
|
|
test/mempool_tests.cpp \
|
|
test/merkle_tests.cpp \
|
|
test/merkleblock_tests.cpp \
|
|
test/miner_tests.cpp \
|
|
test/multisig_tests.cpp \
|
|
test/net_tests.cpp \
|
|
test/netbase_tests.cpp \
|
|
test/pmt_tests.cpp \
|
|
test/policyestimator_tests.cpp \
|
|
test/pow_tests.cpp \
|
|
test/prevector_tests.cpp \
|
|
test/raii_event_tests.cpp \
|
|
test/random_tests.cpp \
|
|
test/reverselock_tests.cpp \
|
|
test/rpc_tests.cpp \
|
|
test/sanity_tests.cpp \
|
|
test/scheduler_tests.cpp \
|
|
test/script_P2SH_tests.cpp \
|
|
test/script_tests.cpp \
|
|
test/script_standard_tests.cpp \
|
|
test/scriptnum_tests.cpp \
|
|
test/serialize_tests.cpp \
|
|
test/sighash_tests.cpp \
|
|
test/sigopcount_tests.cpp \
|
|
test/skiplist_tests.cpp \
|
|
test/streams_tests.cpp \
|
|
test/timedata_tests.cpp \
|
|
test/torcontrol_tests.cpp \
|
|
test/transaction_tests.cpp \
|
|
test/txindex_tests.cpp \
|
|
test/txvalidation_tests.cpp \
|
|
test/txvalidationcache_tests.cpp \
|
|
test/uint256_tests.cpp \
|
|
test/util_tests.cpp \
|
|
test/validation_block_tests.cpp \
|
|
test/versionbits_tests.cpp
|
|
|
|
if ENABLE_WALLET
|
|
BITCOIN_TESTS += \
|
|
wallet/test/accounting_tests.cpp \
|
|
wallet/test/wallet_tests.cpp \
|
|
wallet/test/wallet_crypto_tests.cpp \
|
|
wallet/test/coinselector_tests.cpp
|
|
|
|
BITCOIN_TEST_SUITE += \
|
|
wallet/test/wallet_test_fixture.cpp \
|
|
wallet/test/wallet_test_fixture.h
|
|
endif
|
|
|
|
test_test_bitcoin_SOURCES = $(BITCOIN_TEST_SUITE) $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES)
|
|
test_test_bitcoin_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(TESTDEFS) $(EVENT_CFLAGS)
|
|
test_test_bitcoin_LDADD =
|
|
if ENABLE_WALLET
|
|
test_test_bitcoin_LDADD += $(LIBBITCOIN_WALLET)
|
|
endif
|
|
|
|
test_test_bitcoin_LDADD += $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_CRYPTO_SSE41) $(LIBBITCOIN_CRYPTO_AVX2) $(LIBUNIVALUE) \
|
|
$(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS)
|
|
test_test_bitcoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
|
|
|
test_test_bitcoin_LDADD += $(LIBBITCOIN_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS)
|
|
test_test_bitcoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static
|
|
|
|
if ENABLE_ZMQ
|
|
test_test_bitcoin_LDADD += $(ZMQ_LIBS)
|
|
endif
|
|
#
|
|
|
|
# test_bitcoin_fuzzy binary #
|
|
test_test_bitcoin_fuzzy_SOURCES = test/test_bitcoin_fuzzy.cpp
|
|
test_test_bitcoin_fuzzy_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
|
test_test_bitcoin_fuzzy_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
|
test_test_bitcoin_fuzzy_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
|
|
|
test_test_bitcoin_fuzzy_LDADD = \
|
|
$(LIBUNIVALUE) \
|
|
$(LIBBITCOIN_SERVER) \
|
|
$(LIBBITCOIN_COMMON) \
|
|
$(LIBBITCOIN_UTIL) \
|
|
$(LIBBITCOIN_CONSENSUS) \
|
|
$(LIBBITCOIN_CRYPTO) \
|
|
$(LIBBITCOIN_CRYPTO_SSE41) \
|
|
$(LIBBITCOIN_CRYPTO_AVX2) \
|
|
$(LIBSECP256K1)
|
|
|
|
test_test_bitcoin_fuzzy_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
|
|
#
|
|
|
|
nodist_test_test_bitcoin_SOURCES = $(GENERATED_TEST_FILES)
|
|
|
|
$(BITCOIN_TESTS): $(GENERATED_TEST_FILES)
|
|
|
|
CLEAN_BITCOIN_TEST = test/*.gcda test/*.gcno $(GENERATED_TEST_FILES)
|
|
|
|
CLEANFILES += $(CLEAN_BITCOIN_TEST)
|
|
|
|
bitcoin_test: $(TEST_BINARY)
|
|
|
|
bitcoin_test_check: $(TEST_BINARY) FORCE
|
|
$(MAKE) check-TESTS TESTS=$^
|
|
|
|
bitcoin_test_clean : FORCE
|
|
rm -f $(CLEAN_BITCOIN_TEST) $(test_test_bitcoin_OBJECTS) $(TEST_BINARY)
|
|
|
|
check-local: $(BITCOIN_TESTS:.cpp=.cpp.test)
|
|
@echo "Running test/util/bitcoin-util-test.py..."
|
|
$(PYTHON) $(top_builddir)/test/util/bitcoin-util-test.py
|
|
@echo "Running test/util/rpcauth-test.py..."
|
|
$(PYTHON) $(top_builddir)/test/util/rpcauth-test.py
|
|
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
|
|
if EMBEDDED_UNIVALUE
|
|
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C univalue check
|
|
endif
|
|
|
|
%.cpp.test: %.cpp
|
|
@echo Running tests: `cat $< | grep -E "(BOOST_FIXTURE_TEST_SUITE\\(|BOOST_AUTO_TEST_SUITE\\()" | cut -d '(' -f 2 | cut -d ',' -f 1 | cut -d ')' -f 1` from $<
|
|
$(AM_V_at)$(TEST_BINARY) -l test_suite -t "`cat $< | grep -E "(BOOST_FIXTURE_TEST_SUITE\\(|BOOST_AUTO_TEST_SUITE\\()" | cut -d '(' -f 2 | cut -d ',' -f 1 | cut -d ')' -f 1`" > $<.log 2>&1 || (cat $<.log && false)
|
|
|
|
%.json.h: %.json
|
|
@$(MKDIR_P) $(@D)
|
|
@{ \
|
|
echo "namespace json_tests{" && \
|
|
echo "static unsigned const char $(*F)[] = {" && \
|
|
$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \
|
|
echo "};};"; \
|
|
} > "$@.new" && mv -f "$@.new" "$@"
|
|
@echo "Generated $@"
|