21 #define BOOST_TEST_MODULE isimud_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include <boost/mpl/list.hpp>
26 #include "../exchanges/FIX/v5.0sp2/fix.hpp"
27 #include "../exchanges/MIT/BIT/messages.hpp"
33 #include "core/msm.hpp"
35 using namespace libjmmcg;
36 using namespace libisimud;
38 using msg_types=boost::mpl::list<
39 exchanges::MIT::BIT::MsgTypes
46 template<
class DestMsgsT>
47 struct data_with_payload {
48 using dest_msg_details_t=DestMsgsT;
56 template<
class>
class MSMType,
57 template<
class,
class>
class MSMRowsType,
58 template<
class>
class MachineT
61 using src_msg_details_t=SrcMsgsT;
62 using dest_msg_details_t=DestMsgsT;
63 template<
class StateMachineT>
using msm_t=MSMType<StateMachineT>;
65 using argument_type=data_with_payload<dest_msg_details_t>;
70 template<
auto state,
auto next>
71 void operator()(argument_type &p)
const noexcept(
true) {
80 struct state_machine_t
final : msm_t<state_machine_t> {
81 using base_t=msm_t<state_machine_t>;
82 using row_t=MSMRowsType<
typename src_msg_details_t::MsgType_t,
typename dest_msg_details_t::MsgTypes_t>;
83 using transition_table=
typename base_t::
template rows<
84 typename row_t::
template row<
85 src_msg_details_t::NewOrder_t::static_type,
87 dest_msg_details_t::NewOrder_t::static_type
89 typename row_t::
template row<
90 src_msg_details_t::OrderCancelRequest::static_type,
92 dest_msg_details_t::OrderCancelRequest::static_type
94 typename row_t::
template row<
95 src_msg_details_t::OrderCancelReplace::static_type,
97 dest_msg_details_t::OrderCancelReplaceRequest::static_type
106 using machine=MachineT<state_machine_t>;
112 void process(
typename src_msg_details_t::MsgType_t state, data_with_payload<dest_msg_details_t> &p)
noexcept(
false) {
113 msm.process(state, p);
120 BOOST_AUTO_TEST_SUITE(isimud)
122 BOOST_AUTO_TEST_SUITE(msm_tests)
124 BOOST_AUTO_TEST_SUITE(unroll)
126 BOOST_AUTO_TEST_CASE_TEMPLATE(start_state_assign_msm_states, msg, msg_types) {
127 using assign_msm_states_t=assign_msm_states<
128 exchanges::FIX::v5_0sp2::MsgTypes,
130 msm::unroll::state_transition_table,
131 msm::unroll::row_types,
134 assign_msm_states_t msm;
135 data_with_payload<msg> d;
136 BOOST_CHECK_NO_THROW(msm.process(exchanges::FIX::v5_0sp2::MsgTypes::NewOrder_t::static_type, d));
137 BOOST_CHECK_EQUAL(d.j, 68+42);
140 BOOST_AUTO_TEST_SUITE_END()
142 BOOST_AUTO_TEST_SUITE(hash)
144 BOOST_AUTO_TEST_CASE_TEMPLATE(start_state_assign_msm_states, msg, msg_types) {
145 using assign_msm_states_t=assign_msm_states<
146 exchanges::FIX::v5_0sp2::MsgTypes,
148 msm::hash::state_transition_table,
149 msm::hash::row_types,
152 assign_msm_states_t msm;
153 data_with_payload<msg> d;
154 BOOST_CHECK_NO_THROW(msm.process(exchanges::FIX::v5_0sp2::MsgTypes::NewOrder_t::static_type, d));
155 BOOST_CHECK_EQUAL(d.state, assign_msm_states_t::dest_msg_details_t::NewOrder_t::static_type);
156 BOOST_CHECK_EQUAL(d.j, 68+42);
159 BOOST_AUTO_TEST_SUITE_END()
161 BOOST_AUTO_TEST_SUITE_END()
163 BOOST_AUTO_TEST_SUITE_END()