|
| 1 | +#include <gtest/gtest.h> |
| 2 | + |
| 3 | +#include <cstdint> |
| 4 | +#include <cstring> |
| 5 | +#include <string> |
| 6 | +#include <unordered_map> |
| 7 | + |
| 8 | +#include "databento/compat.hpp" |
| 9 | +#include "databento/record.hpp" |
| 10 | +#include "databento/symbol_map.hpp" |
| 11 | + |
| 12 | +namespace databento { |
| 13 | +namespace test { |
| 14 | +template <typename SM> |
| 15 | +SM GenMapping(std::uint32_t instrument_id, const char* stype_out_symbol) { |
| 16 | + SM res = {}; |
| 17 | + res.hd = RecordHeader{sizeof(SM) / RecordHeader::kLengthMultiplier, |
| 18 | + RType::SymbolMapping, |
| 19 | + 1, |
| 20 | + instrument_id, |
| 21 | + {}}; |
| 22 | + std::strncpy(res.stype_out_symbol.data(), stype_out_symbol, |
| 23 | + res.stype_out_symbol.size()); |
| 24 | + return res; |
| 25 | +} |
| 26 | + |
| 27 | +TEST(PitSymbolMapTests, TestOnSymbolMapping) { |
| 28 | + PitSymbolMap target; |
| 29 | + target.OnSymbolMapping(GenMapping<SymbolMappingMsgV1>(1, "AAPL")); |
| 30 | + target.OnSymbolMapping(GenMapping<SymbolMappingMsgV2>(2, "TSLA")); |
| 31 | + target.OnSymbolMapping(GenMapping<SymbolMappingMsgV1>(3, "MSFT")); |
| 32 | + std::unordered_map<std::uint32_t, std::string> exp{ |
| 33 | + {1, "AAPL"}, {2, "TSLA"}, {3, "MSFT"}}; |
| 34 | + ASSERT_EQ(target.Map(), exp); |
| 35 | + target.OnSymbolMapping(GenMapping<SymbolMappingMsgV1>(10, "AAPL")); |
| 36 | + target.OnSymbolMapping(GenMapping<SymbolMappingMsgV2>(1, "MSFT")); |
| 37 | + ASSERT_EQ(target[1], "MSFT"); |
| 38 | +} |
| 39 | + |
| 40 | +TEST(PitSymbolMapTests, TestOnRecord) { |
| 41 | + PitSymbolMap target; |
| 42 | + auto sm1 = GenMapping<SymbolMappingMsgV1>(1, "AAPL"); |
| 43 | + target.OnRecord(Record{&sm1.hd}); |
| 44 | + auto sm2 = GenMapping<SymbolMappingMsgV2>(2, "TSLA"); |
| 45 | + target.OnRecord(Record{&sm2.hd}); |
| 46 | + sm1 = GenMapping<SymbolMappingMsgV1>(3, "MSFT"); |
| 47 | + target.OnRecord(Record{&sm1.hd}); |
| 48 | + std::unordered_map<std::uint32_t, std::string> exp{ |
| 49 | + {1, "AAPL"}, {2, "TSLA"}, {3, "MSFT"}}; |
| 50 | + ASSERT_EQ(target.Map(), exp); |
| 51 | + sm1 = GenMapping<SymbolMappingMsgV1>(10, "AAPL"); |
| 52 | + target.OnRecord(Record{&sm1.hd}); |
| 53 | + sm2 = GenMapping<SymbolMappingMsgV2>(1, "MSFT"); |
| 54 | + target.OnRecord(Record{&sm2.hd}); |
| 55 | + ASSERT_EQ(target[1], "MSFT"); |
| 56 | +} |
| 57 | +} // namespace test |
| 58 | +} // namespace databento |
0 commit comments