8 #ifndef ML_NEURAL_NET_COMBINE_MOCK_HPP_ 9 #define ML_NEURAL_NET_COMBINE_MOCK_HPP_ 16 #include <boost/test/unit_test.hpp> 17 #include <core/util/test_macros.hpp> 20 namespace neural_net {
28 template <
typename R,
typename... Args>
29 R Call(std::queue<std::function<R(Args...)>> *callbacks, Args &&... args) {
30 TS_ASSERT(!callbacks->empty());
31 auto callback = std::move(callbacks->front());
33 return callback(std::forward<Args>(args)...);
36 class MockSubscription :
public Subscription {
38 ~MockSubscription()
override {
39 TS_ASSERT(cancel_callbacks.empty());
40 TS_ASSERT(demand_callbacks.empty());
43 void Cancel()
override {
return Call(&cancel_callbacks); }
44 std::queue<std::function<void()>> cancel_callbacks;
46 void Request(Demand demand)
override {
47 return Call(&demand_callbacks, std::move(demand));
49 std::queue<std::function<void(Demand)>> demand_callbacks;
53 class MockSubscriber :
public Subscriber<T> {
57 ~MockSubscriber()
override {
58 TS_ASSERT(subscription_callbacks.empty());
59 TS_ASSERT(input_callbacks.empty());
60 TS_ASSERT(completion_callbacks.empty());
63 void Receive(std::shared_ptr<Subscription> subscription)
override {
64 return Call(&subscription_callbacks, std::move(subscription));
66 std::queue<std::function<void(std::shared_ptr<Subscription>)>>
67 subscription_callbacks;
69 Demand Receive(Input element)
override {
70 return Call(&input_callbacks, std::move(element));
72 std::queue<std::function<Demand(Input)>> input_callbacks;
74 void Receive(Completion completion)
override {
75 return Call(&completion_callbacks, std::move(completion));
77 std::queue<std::function<void(Completion)>> completion_callbacks;
81 class MockPublisher :
public Publisher<T> {
85 ~MockPublisher()
override { TS_ASSERT(subscriber_callbacks.empty()); }
87 void Receive(std::shared_ptr<Subscriber<Output>> subscriber)
override {
88 return Call(&subscriber_callbacks, std::move(subscriber));
90 std::queue<std::function<void(std::shared_ptr<Subscriber<Output>>)>>
97 #endif // ML_NEURAL_NET_COMBINE_MOCK_HPP_