MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / Test

Method Test

src/test/miniscript_tests.cpp:449–476  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

447};
448
449void Test(const std::string& ms, const std::string& hexscript, int mode, const KeyConverter& converter,
450 int opslimit = -1, int stacklimit = -1, std::optional<uint32_t> max_wit_size = std::nullopt,
451 std::optional<uint32_t> stack_exec = {})
452{
453 auto node = miniscript::FromString(ms, converter);
454 const bool is_tapscript{miniscript::IsTapscript(converter.MsContext())};
455 if (mode == TESTMODE_INVALID || ((mode & TESTMODE_P2WSH_INVALID) && !is_tapscript) || ((mode & TESTMODE_TAPSCRIPT_INVALID) && is_tapscript)) {
456 BOOST_CHECK_MESSAGE(!node || !node->IsValid(), "Unexpectedly valid: " + ms);
457 } else {
458 BOOST_CHECK_MESSAGE(node, "Unparseable: " + ms);
459 BOOST_CHECK_MESSAGE(node->IsValid(), "Invalid: " + ms);
460 BOOST_CHECK_MESSAGE(node->IsValidTopLevel(), "Invalid top level: " + ms);
461 auto computed_script = node->ToScript(converter);
462 BOOST_CHECK_MESSAGE(node->ScriptSize() == computed_script.size(), "Script size mismatch: " + ms);
463 if (hexscript != "?") BOOST_CHECK_MESSAGE(HexStr(computed_script) == hexscript, "Script mismatch: " + ms + " (" + HexStr(computed_script) + " vs " + hexscript + ")");
464 BOOST_CHECK_MESSAGE(node->IsNonMalleable() == !!(mode & TESTMODE_NONMAL), "Malleability mismatch: " + ms);
465 BOOST_CHECK_MESSAGE(node->NeedsSignature() == !!(mode & TESTMODE_NEEDSIG), "Signature necessity mismatch: " + ms);
466 BOOST_CHECK_MESSAGE((node->GetType() << "k"_mst) == !(mode & TESTMODE_TIMELOCKMIX), "Timelock mix mismatch: " + ms);
467 auto inferred_miniscript = miniscript::FromScript(computed_script, converter);
468 BOOST_CHECK_MESSAGE(inferred_miniscript, "Cannot infer miniscript from script: " + ms);
469 BOOST_CHECK_MESSAGE(inferred_miniscript->ToScript(converter) == computed_script, "Roundtrip failure: miniscript->script != miniscript->script->miniscript->script: " + ms);
470 if (opslimit != -1) BOOST_CHECK_MESSAGE((int)*node->GetOps() == opslimit, "Ops limit mismatch: " << ms << " (" << *node->GetOps() << " vs " << opslimit << ")");
471 if (stacklimit != -1) BOOST_CHECK_MESSAGE((int)*node->GetStackSize() == stacklimit, "Stack limit mismatch: " << ms << " (" << *node->GetStackSize() << " vs " << stacklimit << ")");
472 if (max_wit_size) BOOST_CHECK_MESSAGE(*node->GetWitnessSize() == *max_wit_size, "Witness size limit mismatch: " << ms << " (" << *node->GetWitnessSize() << " vs " << *max_wit_size << ")");
473 if (stack_exec) BOOST_CHECK_MESSAGE(*node->GetExecStackSize() == *stack_exec, "Stack execution limit mismatch: " << ms << " (" << *node->GetExecStackSize() << " vs " << *stack_exec << ")");
474 TestSatisfy(converter, *node);
475 }
476}
477
478void Test(const std::string& ms, const std::string& hexscript, const std::string& hextapscript, int mode,
479 int opslimit, int stacklimit, std::optional<uint32_t> max_wit_size,

Callers 1

BOOST_AUTO_TEST_CASEFunction · 0.45

Calls 15

FromStringFunction · 0.85
IsTapscriptFunction · 0.85
FromScriptFunction · 0.85
IsValidTopLevelMethod · 0.80
ToScriptMethod · 0.80
IsNonMalleableMethod · 0.80
NeedsSignatureMethod · 0.80
GetOpsMethod · 0.80
GetStackSizeMethod · 0.80
GetWitnessSizeMethod · 0.80
GetExecStackSizeMethod · 0.80
HexStrFunction · 0.50

Tested by

no test coverage detected