JayBeams  0.1
Another project to have fun coding.
ut_stock_directory_message.cpp
Go to the documentation of this file.
3 
4 #include <boost/test/unit_test.hpp>
5 
6 /**
7  * @test Verify that the jb::itch5::stock_directory_message decoder works
8  * as expected.
9  */
10 BOOST_AUTO_TEST_CASE(decode_stock_directory_message) {
11  using namespace jb::itch5;
12  using namespace std::chrono;
13 
16 
17  auto x = decoder<true, stock_directory_message>::r(buf.second, buf.first, 0);
18  BOOST_CHECK_EQUAL(
19  x.header.message_type, stock_directory_message::message_type);
20  BOOST_CHECK_EQUAL(x.header.stock_locate, 0);
21  BOOST_CHECK_EQUAL(x.header.tracking_number, 1);
22  BOOST_CHECK_EQUAL(x.header.timestamp.ts.count(), expected_ts.count());
23  BOOST_CHECK_EQUAL(x.stock, "HSART");
24  BOOST_CHECK_EQUAL(x.market_category, u'G');
25  BOOST_CHECK_EQUAL(x.financial_status_indicator, u'N');
26  BOOST_CHECK_EQUAL(x.round_lot_size, 100);
27  BOOST_CHECK_EQUAL(x.roundlots_only, u'N');
28  BOOST_CHECK_EQUAL(x.issue_classification, u'O');
29  BOOST_CHECK_EQUAL(x.issue_subtype, u8"C");
30  BOOST_CHECK_EQUAL(x.authenticity, u'P');
31  BOOST_CHECK_EQUAL(x.short_sale_threshold_indicator, u'N');
32  BOOST_CHECK_EQUAL(x.ipo_flag, u'N');
33  BOOST_CHECK_EQUAL(x.luld_reference_price_tier, u'1');
34  BOOST_CHECK_EQUAL(x.etp_flag, u'N');
35  BOOST_CHECK_EQUAL(x.etp_leverage_factor, 0);
36  BOOST_CHECK_EQUAL(x.inverse_indicator, u'N');
37 
38  x = decoder<false, stock_directory_message>::r(buf.second, buf.first, 0);
39  BOOST_CHECK_EQUAL(
40  x.header.message_type, stock_directory_message::message_type);
41  BOOST_CHECK_EQUAL(x.header.stock_locate, 0);
42  BOOST_CHECK_EQUAL(x.header.tracking_number, 1);
43  BOOST_CHECK_EQUAL(x.header.timestamp.ts.count(), expected_ts.count());
44  BOOST_CHECK_EQUAL(x.stock, "HSART");
45  BOOST_CHECK_EQUAL(x.market_category, u'G');
46  BOOST_CHECK_EQUAL(x.financial_status_indicator, u'N');
47  BOOST_CHECK_EQUAL(x.round_lot_size, 100);
48  BOOST_CHECK_EQUAL(x.roundlots_only, u'N');
49  BOOST_CHECK_EQUAL(x.issue_classification, u'O');
50  BOOST_CHECK_EQUAL(x.issue_subtype, u8"C");
51  BOOST_CHECK_EQUAL(x.authenticity, u'P');
52  BOOST_CHECK_EQUAL(x.short_sale_threshold_indicator, u'N');
53  BOOST_CHECK_EQUAL(x.ipo_flag, u'N');
54  BOOST_CHECK_EQUAL(x.luld_reference_price_tier, u'1');
55  BOOST_CHECK_EQUAL(x.etp_flag, u'N');
56  BOOST_CHECK_EQUAL(x.etp_leverage_factor, 0);
57  BOOST_CHECK_EQUAL(x.inverse_indicator, u'N');
58 }
59 
60 /**
61  * @test Verify that jb::itch5::stock_directory_message iostream operator works
62  * as expected.
63  */
64 BOOST_AUTO_TEST_CASE(stream_stock_directory_message) {
65  using namespace std::chrono;
66  using namespace jb::itch5;
67 
69  auto tmp =
70  decoder<false, stock_directory_message>::r(buf.second, buf.first, 0);
71  std::ostringstream os;
72  os << tmp;
73  BOOST_CHECK_EQUAL(
74  os.str(), "message_type=R,stock_locate=0"
75  ",tracking_number=1,timestamp=113231.123456789"
76  ",stock=HSART"
77  ",market_category=G"
78  ",financial_status_indicator=N"
79  ",round_lot_size=100"
80  ",roundlots_only=N"
81  ",issue_classification=O"
82  ",issue_subtype=C"
83  ",authenticity=P"
84  ",short_sale_threshold_indicator=N"
85  ",ipo_flag=N"
86  ",luld_reference_price_tier=1"
87  ",etp_flag=N"
88  ",etp_leverage_factor=0"
89  ",inverse_indicator=N");
90 }
91 
92 /**
93  * @test Verify that market_category_t works as expected.
94  */
95 BOOST_AUTO_TEST_CASE(simple_market_category) {
96  using namespace jb::itch5;
97  BOOST_CHECK_NO_THROW(market_category_t(u'Q'));
98  BOOST_CHECK_NO_THROW(market_category_t(u'G'));
99  BOOST_CHECK_NO_THROW(market_category_t(u'S'));
100  BOOST_CHECK_NO_THROW(market_category_t(u'N'));
101  BOOST_CHECK_NO_THROW(market_category_t(u'A'));
102  BOOST_CHECK_NO_THROW(market_category_t(u'P'));
103  BOOST_CHECK_NO_THROW(market_category_t(u'Z'));
104  BOOST_CHECK_NO_THROW(market_category_t(u' '));
105  BOOST_CHECK_THROW(market_category_t(u'X'), std::runtime_error);
106 }
107 
108 /**
109  * @test Verify that financial_status_indicator_t works as expected.
110  */
111 BOOST_AUTO_TEST_CASE(simple_financial_status_indicator) {
112  using namespace jb::itch5;
113  BOOST_CHECK_NO_THROW(financial_status_indicator_t(u'Q'));
114  BOOST_CHECK_NO_THROW(financial_status_indicator_t(u'S'));
115  BOOST_CHECK_NO_THROW(financial_status_indicator_t(u' '));
116  BOOST_CHECK_THROW(financial_status_indicator_t(u'X'), std::runtime_error);
117 }
118 
119 /**
120  * @test Verify that roundlots_only_t works as expected.
121  */
122 BOOST_AUTO_TEST_CASE(simple_roundlots_only) {
123  using namespace jb::itch5;
124  BOOST_CHECK_NO_THROW(roundlots_only_t(u'Y'));
125  BOOST_CHECK_NO_THROW(roundlots_only_t(u'N'));
126  BOOST_CHECK_THROW(roundlots_only_t(u'X'), std::runtime_error);
127 }
128 
129 /**
130  * @test Verify that issue_classification_t works as expected.
131  */
132 BOOST_AUTO_TEST_CASE(simple_issue_classification) {
133  using namespace jb::itch5;
134  BOOST_CHECK_NO_THROW(issue_classification_t(u'A'));
135  BOOST_CHECK_NO_THROW(issue_classification_t(u'B'));
136  BOOST_CHECK_NO_THROW(issue_classification_t(u'W'));
137  BOOST_CHECK_THROW(issue_classification_t(u' '), std::runtime_error);
138 }
139 
140 /**
141  * @test Verify that short_sale_threshold_indicator_t works as expected.
142  */
143 BOOST_AUTO_TEST_CASE(simple_short_sale_threshold_indicator) {
144  using namespace jb::itch5;
145  BOOST_CHECK_NO_THROW(short_sale_threshold_indicator_t(u'Y'));
146  BOOST_CHECK_NO_THROW(short_sale_threshold_indicator_t(u'N'));
147  BOOST_CHECK_NO_THROW(short_sale_threshold_indicator_t(u' '));
148  BOOST_CHECK_THROW(short_sale_threshold_indicator_t(u'X'), std::runtime_error);
149 }
150 
151 /**
152  * @test Verify that luld_reference_price_tier_t works as expected.
153  */
154 BOOST_AUTO_TEST_CASE(simple_luld_reference_price_tier) {
155  using namespace jb::itch5;
156  BOOST_CHECK_NO_THROW(luld_reference_price_tier_t(u'1'));
157  BOOST_CHECK_NO_THROW(luld_reference_price_tier_t(u'2'));
158  BOOST_CHECK_NO_THROW(luld_reference_price_tier_t(u' '));
159  BOOST_CHECK_THROW(luld_reference_price_tier_t(u'*'), std::runtime_error);
160 }
161 
162 /**
163  * @test Verify that etp_flag_t works as expected.
164  */
165 BOOST_AUTO_TEST_CASE(simple_etp_flag) {
166  using namespace jb::itch5;
167  BOOST_CHECK_NO_THROW(etp_flag_t(u'Y'));
168  BOOST_CHECK_NO_THROW(etp_flag_t(u'N'));
169  BOOST_CHECK_NO_THROW(etp_flag_t(u' '));
170  BOOST_CHECK_THROW(etp_flag_t(u'*'), std::runtime_error);
171 }
172 
173 /**
174  * @test Verify that inverse_indicator_t works as expected.
175  */
176 BOOST_AUTO_TEST_CASE(simple_inverse_indicator) {
177  using namespace jb::itch5;
178  BOOST_CHECK_NO_THROW(inverse_indicator_t(u'Y'));
179  BOOST_CHECK_NO_THROW(inverse_indicator_t(u'N'));
180  BOOST_CHECK_THROW(inverse_indicator_t(u'*'), std::runtime_error);
181 }
static T r(std::size_t size, void const *msg, std::size_t offset)
Read a single message or field.
Contains classes and functions to parse NASDAQ ITCH-5.0 messages, more information about ITCH-5...
char_list_field< u 'Y', u 'N'> inverse_indicator_t
Represent the &#39;Inverse Indicator&#39; field on a &#39;Stock Directory&#39; message.
char_list_field< u 'Y', u 'N'> roundlots_only_t
Represent the &#39;Round Lots Only&#39; field on a &#39;Stock Directory&#39; message.
char_list_field< u 'A', u 'B', u 'C', u 'F', u 'I', u 'L', u 'N', u 'O', u 'P', u 'Q', u 'R', u 'S', u 'T', u 'U', u 'V', u 'W' > issue_classification_t
Represent the &#39;Issue Classification&#39; field on a &#39;Stock Directory&#39; message.
char_list_field< u 'Q', u 'G', u 'S', u 'N', u 'A', u 'P', u 'Z', u' ' > market_category_t
Represent the &#39;Market Category&#39; field on a &#39;Stock Directory&#39; message.
BOOST_AUTO_TEST_CASE(decode_stock_directory_message)
char_list_field< u 'Y', u 'N', u' '> etp_flag_t
Represent the &#39;ETP Flag&#39; field on a &#39;Stock Directory&#39; message.
char_list_field< u 'D', u 'E', u 'Q', u 'S', u 'G', u 'H', u 'J', u 'K', u 'C', u 'N', u' ' > financial_status_indicator_t
Represent the &#39;Financial Status Indicator&#39; field on a &#39;Stock Directory&#39; message.
std::pair< char const *, std::size_t > stock_directory()
Definition: data.cpp:228
std::chrono::nanoseconds expected_ts()
Return the expected timestamp for all the test messages.
Definition: data.cpp:19
char_list_field< u 'Y', u 'N', u' '> short_sale_threshold_indicator_t
Represent the &#39;Short Sale Threshold Indicator&#39; field on a &#39;Stock Directory&#39; message.
char_list_field< u '1', u '2', u' '> luld_reference_price_tier_t
Represent the &#39;LULD Reference Price Tier&#39; field on a &#39;Stock Directory&#39; message.