@@ -21,6 +21,10 @@ TEST_CASE("csv_writing")
21
21
static constexpr char const * filename_2 = " orders_rotating.csv" ;
22
22
static constexpr char const * filename_2_1 = " orders_rotating.1.csv" ;
23
23
static constexpr char const * filename_2_2 = " orders_rotating.2.csv" ;
24
+ static constexpr char const * filename_3 = " orders_3.csv" ;
25
+ static constexpr char const * filename_4 = " orders_4.csv" ;
26
+ static constexpr char const * filename_5 = " orders_5.csv" ;
27
+ static constexpr char const * filename_6 = " orders_6.csv" ;
24
28
25
29
// Start the backend thread
26
30
quill::BackendOptions backend_options;
@@ -58,6 +62,71 @@ TEST_CASE("csv_writing")
58
62
}
59
63
}
60
64
65
+ {
66
+ auto file_sink = quill::Frontend::create_or_get_sink<quill::FileSink>(
67
+ filename_3,
68
+ []()
69
+ {
70
+ quill::FileSinkConfig cfg;
71
+ cfg.set_open_mode (' w' );
72
+ cfg.set_filename_append_option (quill::FilenameAppendOption::None);
73
+ return cfg;
74
+ }());
75
+
76
+ quill::CsvWriter<OrderCsvSchema, quill::FrontendOptions> csv_writter{filename_3, std::move (file_sink)};
77
+ csv_writter.append_row (13212123 , " AAPL" , 100 , 210.32321 , " BUY" );
78
+ csv_writter.append_row (132121123 , " META" , 300 , 478.32321 , " SELL" );
79
+ csv_writter.append_row (14212123 , " AAPL" , 120 , 210.42321 , " BUY" );
80
+ }
81
+
82
+ {
83
+ // append mode
84
+ {
85
+ quill::CsvWriter<OrderCsvSchema, quill::FrontendOptions> csv_writter{filename_4, ' w' };
86
+ csv_writter.append_row (13212123 , " AAPL" , 100 , 210.32321 , " BUY" );
87
+ csv_writter.append_row (132121123 , " META" , 300 , 478.32321 , " SELL" );
88
+ csv_writter.append_row (14212123 , " AAPL" , 120 , 210.42321 , " BUY" );
89
+ }
90
+
91
+ {
92
+ quill::CsvWriter<OrderCsvSchema, quill::FrontendOptions> csv_writter{filename_4, ' a' };
93
+ csv_writter.append_row (13212123 , " AAPL" , 200 , 210.32321 , " BUY" );
94
+ csv_writter.append_row (132121123 , " META" , 400 , 478.32321 , " SELL" );
95
+ csv_writter.append_row (14212123 , " AAPL" , 220 , 210.42321 , " BUY" );
96
+ }
97
+ }
98
+
99
+ {
100
+ auto file_sink_5 = quill::Frontend::create_or_get_sink<quill::FileSink>(
101
+ filename_5,
102
+ []()
103
+ {
104
+ quill::FileSinkConfig cfg;
105
+ cfg.set_open_mode (' w' );
106
+ cfg.set_filename_append_option (quill::FilenameAppendOption::None);
107
+ return cfg;
108
+ }());
109
+
110
+ auto file_sink_6 = quill::Frontend::create_or_get_sink<quill::FileSink>(
111
+ filename_6,
112
+ []()
113
+ {
114
+ quill::FileSinkConfig cfg;
115
+ cfg.set_open_mode (' w' );
116
+ cfg.set_filename_append_option (quill::FilenameAppendOption::None);
117
+ return cfg;
118
+ }());
119
+
120
+ std::vector<std::shared_ptr<quill::Sink>> sinks;
121
+ sinks.push_back (std::move (file_sink_5));
122
+ sinks.push_back (std::move (file_sink_6));
123
+
124
+ quill::CsvWriter<OrderCsvSchema, quill::FrontendOptions> csv_writter{filename_5, std::move (sinks)};
125
+ csv_writter.append_row (13212123 , " AAPL" , 100 , 210.32321 , " BUY" );
126
+ csv_writter.append_row (132121123 , " META" , 300 , 478.32321 , " SELL" );
127
+ csv_writter.append_row (14212123 , " AAPL" , 120 , 210.42321 , " BUY" );
128
+ }
129
+
61
130
// Wait until the backend thread stops for test stability
62
131
Backend::stop ();
63
132
@@ -98,9 +167,60 @@ TEST_CASE("csv_writing")
98
167
REQUIRE_EQ (file_contents_2[0 ], " order_id,symbol,quantity,price,side" );
99
168
}
100
169
170
+ {
171
+ // Read file and check
172
+ std::vector<std::string> const file_contents = quill::testing::file_contents (filename_3);
173
+ REQUIRE_EQ (file_contents.size (), 4 );
174
+
175
+ REQUIRE (quill::testing::file_contains (file_contents, " order_id,symbol,quantity,price,side" ));
176
+ REQUIRE (quill::testing::file_contains (file_contents, " 13212123,AAPL,100,210.32,BUY" ));
177
+ REQUIRE (quill::testing::file_contains (file_contents, " 132121123,META,300,478.32,SELL" ));
178
+ REQUIRE (quill::testing::file_contains (file_contents, " 14212123,AAPL,120,210.42,BUY" ));
179
+ }
180
+
181
+ {
182
+ // Read file and check
183
+ std::vector<std::string> const file_contents = quill::testing::file_contents (filename_4);
184
+ REQUIRE_EQ (file_contents.size (), 7 );
185
+
186
+ REQUIRE (quill::testing::file_contains (file_contents, " order_id,symbol,quantity,price,side" ));
187
+ REQUIRE (quill::testing::file_contains (file_contents, " 13212123,AAPL,100,210.32,BUY" ));
188
+ REQUIRE (quill::testing::file_contains (file_contents, " 132121123,META,300,478.32,SELL" ));
189
+ REQUIRE (quill::testing::file_contains (file_contents, " 14212123,AAPL,120,210.42,BUY" ));
190
+ REQUIRE (quill::testing::file_contains (file_contents, " 13212123,AAPL,200,210.32,BUY" ));
191
+ REQUIRE (quill::testing::file_contains (file_contents, " 132121123,META,400,478.32,SELL" ));
192
+ REQUIRE (quill::testing::file_contains (file_contents, " 14212123,AAPL,220,210.42,BUY" ));
193
+ }
194
+
195
+ {
196
+ // Read file and check
197
+ std::vector<std::string> const file_contents = quill::testing::file_contents (filename_5);
198
+ REQUIRE_EQ (file_contents.size (), 4 );
199
+
200
+ REQUIRE (quill::testing::file_contains (file_contents, " order_id,symbol,quantity,price,side" ));
201
+ REQUIRE (quill::testing::file_contains (file_contents, " 13212123,AAPL,100,210.32,BUY" ));
202
+ REQUIRE (quill::testing::file_contains (file_contents, " 132121123,META,300,478.32,SELL" ));
203
+ REQUIRE (quill::testing::file_contains (file_contents, " 14212123,AAPL,120,210.42,BUY" ));
204
+ }
205
+
206
+ {
207
+ // Read file and check
208
+ std::vector<std::string> const file_contents = quill::testing::file_contents (filename_6);
209
+ REQUIRE_EQ (file_contents.size (), 4 );
210
+
211
+ REQUIRE (quill::testing::file_contains (file_contents, " order_id,symbol,quantity,price,side" ));
212
+ REQUIRE (quill::testing::file_contains (file_contents, " 13212123,AAPL,100,210.32,BUY" ));
213
+ REQUIRE (quill::testing::file_contains (file_contents, " 132121123,META,300,478.32,SELL" ));
214
+ REQUIRE (quill::testing::file_contains (file_contents, " 14212123,AAPL,120,210.42,BUY" ));
215
+ }
216
+
101
217
testing::remove_file (filename);
102
218
testing::remove_file (filename_1);
103
219
testing::remove_file (filename_2);
104
220
testing::remove_file (filename_2_1);
105
221
testing::remove_file (filename_2_2);
222
+ testing::remove_file (filename_3);
223
+ testing::remove_file (filename_4);
224
+ testing::remove_file (filename_5);
225
+ testing::remove_file (filename_6);
106
226
}
0 commit comments