/* @file Sink.test.cpp */ #include "xo/reactor/PollingReactor.hpp" #include "xo/reactor/Sink.hpp" #include "xo/indentlog/print/pair.hpp" #include "catch2/catch.hpp" namespace xo { using xo::reactor::Reactor; using xo::reactor::PollingReactor; using xo::reactor::AbstractSink; using xo::reactor::Sink1; using xo::reactor::SinkEndpoint; using xo::reactor::SinkToConsole; using xo::time::utc_nanos; using xo::ref::rp; namespace { class TestSink : public SinkEndpoint { public: TestSink() = default; virtual uint32_t n_in_ev() const override { return 0; } virtual bool allow_volatile_source() const override { return true; } virtual void notify_ev(int const & ev) override {} virtual void display(std::ostream & os) const override { os << ""; } }; /*TestSink*/ class TestSink2 : public SinkEndpoint { public: TestSink2() = default; virtual uint32_t n_in_ev() const override { return 0; } virtual bool allow_volatile_source() const override { return true; } virtual void notify_ev(utc_nanos const & ev) override {} virtual void display(std::ostream & os) const override { os << ""; } }; /*TestSink2*/ using TestSink3 = SinkToConsole>; } /*namespace*/ namespace ut { TEST_CASE("sink-cast", "[reactor][sink]") { rp test_sink = new TestSink(); rp sink = test_sink; TestSink * cast_sink = dynamic_cast(sink.get()); REQUIRE(test_sink.get() == cast_sink); Sink1 * int_sink = dynamic_cast *>(sink.get()); REQUIRE(test_sink.get() == int_sink); rp> int_sink2 = Sink1::require_native("TEST_CASE(sink-cast)", sink.get()); REQUIRE(test_sink.get() == int_sink2.get()); } /*TEST_CASE(sink-cast)*/ TEST_CASE("sink-cast2", "[reactor]") { rp test_sink = new TestSink2(); rp sink = test_sink; TestSink2 * cast_sink = dynamic_cast(sink.get()); REQUIRE(test_sink.get() == cast_sink); Sink1 * dt_sink = dynamic_cast *>(sink.get()); REQUIRE(test_sink.get() == dt_sink); rp> dt_sink2 = Sink1::require_native("TEST_CASE(sink-cast2)", sink.get()); REQUIRE(test_sink.get() == dt_sink2.get()); } /*TEST_CASE(sink-cast2)*/ TEST_CASE("sink-cast3", "[reactor]") { rp test_sink = new TestSink3(); rp sink = test_sink; TestSink3 * cast_sink = dynamic_cast(sink.get()); REQUIRE(test_sink.get() == cast_sink); Sink1> * ev_sink = dynamic_cast> *>(sink.get()); REQUIRE(test_sink.get() == ev_sink); rp>> ev_sink2 = Sink1>::require_native("TEST_CASE(sink-cast3)", sink.get()); REQUIRE(test_sink.get() == ev_sink2.get()); } /*TEST_CASE(sink-cast3)*/ } /*namespace ut*/ } /*namespace xo*/ /* end Sink.test.cpp */