| 36 | }; |
| 37 | |
| 38 | bool SendAndReceive(size_t index1, size_t index2) |
| 39 | { |
| 40 | MySender sender; |
| 41 | |
| 42 | // Create and send a new order |
| 43 | proto::OrderMessage order({ proto::Order({ 1, "EURUSD", proto::OrderSide::buy, proto::OrderType::market, 1.23456, 1000.0 }) }); |
| 44 | sender.send(order); |
| 45 | |
| 46 | // Create and send a new balance wallet |
| 47 | proto::BalanceMessage balance({ proto::Balance({ "USD", 1000.0 }) }); |
| 48 | sender.send(balance); |
| 49 | |
| 50 | // Create and send a new account with some orders |
| 51 | proto::AccountMessage account({ proto::Account({ 1, "Test", proto::State::good, { "USD", 1000.0 }, std::make_optional<proto::Balance>({ "EUR", 100.0 }), {} }) }); |
| 52 | account.body.orders.emplace_back(1, "EURUSD", proto::OrderSide::buy, proto::OrderType::market, 1.23456, 1000.0); |
| 53 | account.body.orders.emplace_back(2, "EURUSD", proto::OrderSide::sell, proto::OrderType::limit, 1.0, 100.0); |
| 54 | account.body.orders.emplace_back(3, "EURUSD", proto::OrderSide::buy, proto::OrderType::stop, 1.5, 10.0); |
| 55 | sender.send(account); |
| 56 | |
| 57 | MyReceiver receiver; |
| 58 | |
| 59 | // Receive data from the sender |
| 60 | index1 %= sender.buffer().size(); |
| 61 | index2 %= sender.buffer().size(); |
| 62 | index2 = std::max(index1, index2); |
| 63 | receiver.receive(sender.buffer().data(), index1); |
| 64 | receiver.receive(sender.buffer().data() + index1, index2 - index1); |
| 65 | receiver.receive(sender.buffer().data() + index2, sender.buffer().size() - index2); |
| 66 | return receiver.check(); |
| 67 | } |
| 68 | |
| 69 | TEST_CASE("Send & Receive", "[FBE]") |
| 70 | { |