Files
rippled/src/test/jtx/require.h
2026-07-13 10:40:40 +00:00

69 lines
1.1 KiB
C++

#pragma once
#include <test/jtx/JTx.h>
#include <test/jtx/requires.h>
#include <functional>
#include <vector>
namespace xrpl {
namespace detail {
template <class Cond, class... Args>
inline void
requireArgs(test::jtx::requires_t& vec, Cond const& cond, Args const&... args)
{
vec.push_back(cond);
if constexpr (sizeof...(args) > 0)
requireArgs(vec, args...);
}
} // namespace detail
namespace test::jtx {
/**
* Compose many condition functors into one
*/
template <class... Args>
require_t
required(Args const&... args)
{
requires_t vec;
detail::requireArgs(vec, args...);
return [vec](Env& env) {
for (auto const& f : vec)
f(env);
};
}
/**
* Check a set of conditions.
*
* The conditions are checked after a JTx is
* applied, and only if the resulting TER
* matches the expected TER.
*/
class Require
{
private:
require_t cond_;
public:
template <class... Args>
Require(Args const&... args) : cond_(required(args...))
{
}
void
operator()(Env&, JTx& jt) const
{
jt.require.emplace_back(cond_);
}
};
} // namespace test::jtx
} // namespace xrpl