From 8c54e34a683c7d426e64b209cf303464c60862a7 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 21 Oct 2016 22:32:29 -0500 Subject: [PATCH] Use tromp's solver to regenerate miner tests When using, comment out tromp's solver in miner.cpp to avoid linker errors. --- src/test/miner_tests.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 7b145c833..a1e621cb3 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -10,6 +10,7 @@ #include "uint256.h" #include "util.h" #include "crypto/equihash.h" +//#include "pow/tromp/equi_miner.h" #include "test/test_bitcoin.h" @@ -209,19 +210,37 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) pblock->nNonce.begin(), pblock->nNonce.size()); - // (x_1, x_2, ...) = A(I, V, n, k) + // Create solver and initialize it. + equi eq(1); + eq.setstate(&curr_state); + + // Intialization done, start algo driver. + eq.digit0(0); + eq.xfull = eq.bfull = eq.hfull = 0; + eq.showbsizes(0); + for (u32 r = 1; r < WK; r++) { + (r&1) ? eq.digitodd(r, 0) : eq.digiteven(r, 0); + eq.xfull = eq.bfull = eq.hfull = 0; + eq.showbsizes(r); + } + eq.digitK(0); + + // Convert solution indices to byte array (decompress) and pass it to validBlock method. std::set> solns; - std::function)> validBlock = - [&solns](std::vector soln) { - solns.insert(soln); - return false; - }; - EhOptimisedSolveUncancellable(n, k, curr_state, validBlock); + for (size_t s = 0; s < eq.nsols; s++) { + LogPrint("pow", "Checking solution %d\n", s+1); + std::vector index_vector(PROOFSIZE); + for (size_t i = 0; i < PROOFSIZE; i++) { + index_vector[i] = eq.sols[s][i]; + } + std::vector sol_char = GetMinimalFromIndices(index_vector, DIGITBITS); + solns.insert(sol_char); + } bool ret; for (auto soln : solns) { EhIsValidSolution(n, k, curr_state, soln, ret); - assert(ret); + if (!ret) continue; pblock->nSolution = soln; CValidationState state;