| 36 | }; |
| 37 | |
| 38 | bool SendAndReceiveFinal(size_t index1, size_t index2) |
| 39 | { |
| 40 | MyFinalSender sender; |
| 41 | |
| 42 | // Create and send a new order |
| 43 | protoex::OrderMessage order({ protoex::Order({ 1, "EURUSD", protoex::OrderSide::buy, protoex::OrderType::market, 1.23456, 1000.0, 0.0, 0.0 }) }); |
| 44 | sender.send(order); |
| 45 | |
| 46 | // Create and send a new balance wallet |
| 47 | protoex::BalanceMessage balance({ protoex::Balance({ "USD", 1000.0 }, 100.0) }); |
| 48 | sender.send(balance); |
| 49 | |
| 50 | // Create and send a new account with some orders |
| 51 | protoex::AccountMessage account({ protoex::Account({ 1, "Test", protoex::StateEx::good, { proto::Balance("USD", 1000.0), 100.0 }, std::make_optional<protoex::Balance>({ proto::Balance("EUR", 100.0), 10.0 }), {} }) }); |
| 52 | account.body.orders.emplace_back(1, "EURUSD", protoex::OrderSide::buy, protoex::OrderType::market, 1.23456, 1000.0, 0.0, 0.0); |
| 53 | account.body.orders.emplace_back(2, "EURUSD", protoex::OrderSide::sell, protoex::OrderType::limit, 1.0, 100.0, 0.0, 0.0); |
| 54 | account.body.orders.emplace_back(3, "EURUSD", protoex::OrderSide::buy, protoex::OrderType::stop, 1.5, 10.0, 0.0, 0.0); |
| 55 | sender.send(account); |
| 56 | |
| 57 | MyFinalReceiver 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 (Final)", "[FBE]") |
| 70 | { |