#ifndef BITCOIN_TEST_UTIL_TIME_H
#define BITCOIN_TEST_UTIL_TIME_H
#include <util/check.h>
#include <util/time.h>
class SteadyClockContext
{
MockableSteadyClock::mock_time_point::duration t{MockableSteadyClock::INITIAL_MOCK_TIME};
public:
explicit SteadyClockContext() { (*this) += 0s; }
~SteadyClockContext() { MockableSteadyClock::ClearMockTime(); }
SteadyClockContext(const SteadyClockContext&) = delete;
SteadyClockContext& operator=(const SteadyClockContext&) = delete;
void operator+=(std::chrono::milliseconds d)
{
Assert(d >= 0s); t += d;
MockableSteadyClock::SetMockTime(t);
}
};
class NodeClockContext
{
NodeSeconds m_t{std::chrono::seconds::max()};
public:
explicit NodeClockContext(NodeSeconds init_time) { set(init_time); }
explicit NodeClockContext(std::chrono::seconds init_time) { set(init_time); }
explicit NodeClockContext() { set(++Now<NodeSeconds>().time_since_epoch()); }
~NodeClockContext() { set(0s); }
NodeClockContext(const NodeClockContext&) = delete;
NodeClockContext& operator=(const NodeClockContext&) = delete;
void set(NodeSeconds t) { SetMockTime(m_t = t); }
void set(std::chrono::seconds t) { set(NodeSeconds{t}); }
void operator+=(std::chrono::seconds d) { set(m_t += d); }
void operator-=(std::chrono::seconds d) { set(m_t -= d); }
};
#endif