|
| 1 | +// |
| 2 | +// Created by Ivan Shynkarenka on 30.03.2017 |
| 3 | +// |
| 4 | + |
| 5 | +#include "test.h" |
| 6 | + |
| 7 | +#include "../proto/trade.h" |
| 8 | +#include "zpp_bits/zpp_bits.h" |
| 9 | + |
| 10 | +using namespace CppCommon; |
| 11 | +using namespace CppSerialization; |
| 12 | + |
| 13 | +namespace TradeProto |
| 14 | +{ |
| 15 | +auto serialize(const Order &) -> zpp::bits::members<6>; |
| 16 | +auto serialize(const Account &) -> zpp::bits::members<4>; |
| 17 | +auto serialize(const Balance &) -> zpp::bits::members<2>; |
| 18 | +} |
| 19 | + |
| 20 | +TEST_CASE("ZppBits", "[CppSerialization]") |
| 21 | +{ |
| 22 | + // Create a new account with some orders |
| 23 | + TradeProto::Account account(1, "Test", "USD", 1000); |
| 24 | + account.Orders.emplace_back(TradeProto::Order(1, "EURUSD", TradeProto::OrderSide::BUY, TradeProto::OrderType::MARKET, 1.23456, 1000)); |
| 25 | + account.Orders.emplace_back(TradeProto::Order(2, "EURUSD", TradeProto::OrderSide::SELL, TradeProto::OrderType::LIMIT, 1.0, 100)); |
| 26 | + account.Orders.emplace_back(TradeProto::Order(3, "EURUSD", TradeProto::OrderSide::BUY, TradeProto::OrderType::STOP, 1.5, 10)); |
| 27 | + |
| 28 | + // Serialize the account to bytes. |
| 29 | + auto [buffer, in, out] = zpp::bits::data_in_out(); |
| 30 | + (void) out(account); |
| 31 | + |
| 32 | + REQUIRE(!buffer.empty()); |
| 33 | + |
| 34 | + // Deserialize the account from bytes. |
| 35 | + TradeProto::Account deserialized; |
| 36 | + (void) in(deserialized); |
| 37 | + |
| 38 | + REQUIRE(deserialized.Id == 1); |
| 39 | + REQUIRE(deserialized.Name == "Test"); |
| 40 | + REQUIRE(std::string(deserialized.Wallet.Currency) == "USD"); |
| 41 | + REQUIRE(deserialized.Wallet.Amount == 1000); |
| 42 | + REQUIRE(deserialized.Orders.size() == 3); |
| 43 | + REQUIRE(deserialized.Orders[0].Id == 1); |
| 44 | + REQUIRE(std::string(deserialized.Orders[0].Symbol) == "EURUSD"); |
| 45 | + REQUIRE(deserialized.Orders[0].Side == TradeProto::OrderSide::BUY); |
| 46 | + REQUIRE(deserialized.Orders[0].Type == TradeProto::OrderType::MARKET); |
| 47 | + REQUIRE(deserialized.Orders[0].Price == 1.23456); |
| 48 | + REQUIRE(deserialized.Orders[0].Volume == 1000); |
| 49 | + REQUIRE(deserialized.Orders[1].Id == 2); |
| 50 | + REQUIRE(std::string(deserialized.Orders[1].Symbol) == "EURUSD"); |
| 51 | + REQUIRE(deserialized.Orders[1].Side == TradeProto::OrderSide::SELL); |
| 52 | + REQUIRE(deserialized.Orders[1].Type == TradeProto::OrderType::LIMIT); |
| 53 | + REQUIRE(deserialized.Orders[1].Price == 1.0); |
| 54 | + REQUIRE(deserialized.Orders[1].Volume == 100); |
| 55 | + REQUIRE(deserialized.Orders[2].Id == 3); |
| 56 | + REQUIRE(std::string(deserialized.Orders[2].Symbol) == "EURUSD"); |
| 57 | + REQUIRE(deserialized.Orders[2].Side == TradeProto::OrderSide::BUY); |
| 58 | + REQUIRE(deserialized.Orders[2].Type == TradeProto::OrderType::STOP); |
| 59 | + REQUIRE(deserialized.Orders[2].Price == 1.5); |
| 60 | + REQUIRE(deserialized.Orders[2].Volume == 10); |
| 61 | +} |
0 commit comments