test_doc  0.1
 全部  文件 函数 变量 宏定义 
test_KData.cpp
浏览该文件的文档.
1 /*
2  * test_Stock.cpp
3  *
4  * Created on: 2011-12-10
5  * Author: fasiondog
6  */
7 
8 #ifdef TEST_ALL_IN_ONE
9  #include <boost/test/unit_test.hpp>
10 #else
11  #define BOOST_TEST_MODULE test_hikyuu_base
12  #include <boost/test/unit_test.hpp>
13 #endif
14 
15 #include <cmath>
16 #include <hikyuu/StockManager.h>
17 #include <hikyuu/KQuery.h>
18 #include <hikyuu/KData.h>
19 #include <hikyuu/Stock.h>
20 
21 using namespace hku;
22 
30 BOOST_AUTO_TEST_CASE( test_getKData_by_index ) {
31  StockManager& sm = StockManager::instance();
32  Stock stock;
33  KData kdata;
34  KRecord record, expect;
35  KQuery query;
36  size_t total;
37 
39  kdata = stock.getKData(KQuery());
40  BOOST_CHECK(kdata.getStock() == Null<Stock>());
41  BOOST_CHECK(kdata.size() == 0);
42  BOOST_CHECK(kdata.empty() == true);
43  BOOST_CHECK(kdata.startPos() == 0);
44  BOOST_CHECK(kdata.endPos() == 0);
45  BOOST_CHECK(kdata.lastPos() == 0);
46 
47 
51 
52  stock = sm.getStock("sh000001");
53  query = KQuery(0);
54  kdata = stock.getKData(query);
55  BOOST_CHECK(kdata.getStock() == stock);
56  BOOST_CHECK(kdata.empty() == false);
57  BOOST_CHECK(kdata.size() == 5121);
58  BOOST_CHECK(kdata.startPos() == 0);
59  BOOST_CHECK(kdata.lastPos() == 5120);
60  BOOST_CHECK(kdata.endPos() == 5121);
61  record = kdata[0];
62  expect = KRecord(Datetime(199012190000),96.05,99.98,95.79,99.98,49.4,1260);
63  BOOST_CHECK(record == expect);
64 
65  record = kdata[kdata.size() - 1];
66  expect = KRecord(Datetime(201112060000),2326.66,2331.892 ,2310.155, 2325.905, 4262559.5, 45917078);
67  BOOST_CHECK(record == expect);
68 
70  total = stock.getCount(KQuery::DAY);
71  query = KQuery(total - 1);
72  kdata = stock.getKData(query);
73  BOOST_CHECK(kdata.empty() == false);
74  BOOST_CHECK(kdata.size() == 1);
75  BOOST_CHECK(kdata.startPos() == 5120);
76  BOOST_CHECK(kdata.endPos() == 5121);
77  BOOST_CHECK(kdata.lastPos() == 5120);
78  record = kdata[0];
79  expect = KRecord(Datetime(201112060000),2326.66,2331.892 ,2310.155, 2325.905, 4262559.5, 45917078);
80  BOOST_CHECK(record == expect);
81 
83  total = stock.getCount(KQuery::DAY);
84  query = KQuery(total);
85  kdata = stock.getKData(query);
86  BOOST_CHECK(kdata.getStock() == stock);
87  BOOST_CHECK(kdata.size() == 0);
88  BOOST_CHECK(kdata.empty() == true);
89  BOOST_CHECK(kdata.startPos() == 0);
90  BOOST_CHECK(kdata.lastPos() == 0);
91  BOOST_CHECK(kdata.endPos() == 0);
92 
94  query = KQuery(0, 1);
95  kdata = stock.getKData(query);
96  BOOST_CHECK(kdata.size() == 1);
97  BOOST_CHECK(kdata.empty() == false);
98  BOOST_CHECK(kdata.startPos() == 0);
99  BOOST_CHECK(kdata.endPos() == 1);
100  BOOST_CHECK(kdata.lastPos() == 0);
101  record = kdata[0];
102  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
103  BOOST_CHECK(record == expect);
104 
106  query = KQuery(1, 2);
107  kdata = stock.getKData(query);
108  BOOST_CHECK(kdata.size() == 1);
109  BOOST_CHECK(kdata.empty() == false);
110  BOOST_CHECK(kdata.startPos() == 1);
111  BOOST_CHECK(kdata.endPos() == 2);
112  BOOST_CHECK(kdata.lastPos() == 1);
113  record = kdata[0];
114  expect = KRecord(Datetime(199012200000), 104.3, 104.39, 99.98, 104.39, 8.4, 197);
115  BOOST_CHECK(record == expect);
116 
118  query = KQuery(1, 10);
119  kdata = stock.getKData(query);
120  BOOST_CHECK(kdata.size() == 9);
121  BOOST_CHECK(kdata.empty() == false);
122  BOOST_CHECK(kdata.startPos() == 1);
123  BOOST_CHECK(kdata.endPos() == 10);
124  BOOST_CHECK(kdata.lastPos() == 9);
125  record = kdata[0];
126  expect = KRecord(Datetime(199012200000), 104.3, 104.39, 99.98, 104.39, 8.4, 197);
127  BOOST_CHECK(record == expect);
128 
129  record = kdata[kdata.size()-1];
130  expect = KRecord(Datetime(199101020000), 127.61, 128.84, 127.61, 128.84, 5.9, 91);
131  BOOST_CHECK(record == expect);
132 
134  total = stock.getCount(KQuery::DAY);
135  query = KQuery(total - 1, total);
136  kdata = stock.getKData(query);
137  BOOST_CHECK(kdata.size() == 1);
138  BOOST_CHECK(kdata.empty() == false);
139  BOOST_CHECK(kdata.startPos() == total - 1);
140  BOOST_CHECK(kdata.endPos() == total);
141  BOOST_CHECK(kdata.lastPos() == total - 1);
142  record = kdata[0];
143  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
144  BOOST_CHECK(record == expect);
145 
147  query = KQuery(0, 0);
148  kdata = stock.getKData(query);
149  BOOST_CHECK(kdata.size() == 0);
150  BOOST_CHECK(kdata.empty() == true);
151  BOOST_CHECK(kdata.startPos() == 0);
152  BOOST_CHECK(kdata.endPos() == 0);
153  BOOST_CHECK(kdata.lastPos() == 0);
154 
156  query = KQuery(1, 1);
157  kdata = stock.getKData(query);
158  BOOST_CHECK(kdata.size() == 0);
159  BOOST_CHECK(kdata.empty() == true);
160  BOOST_CHECK(kdata.startPos() == 0);
161  BOOST_CHECK(kdata.endPos() == 0);
162  BOOST_CHECK(kdata.lastPos() == 0);
163 
165  total = stock.getCount();
166  query = KQuery(total-1, total-1);
167  kdata = stock.getKData(query);
168  BOOST_CHECK(kdata.size() == 0);
169  BOOST_CHECK(kdata.empty() == true);
170  BOOST_CHECK(kdata.startPos() == 0);
171  BOOST_CHECK(kdata.endPos() == 0);
172  BOOST_CHECK(kdata.lastPos() == 0);
173 
175  query = KQuery(-1);
176  total = stock.getCount();
177  kdata = stock.getKData(query);
178  BOOST_CHECK(kdata.size() == 1);
179  BOOST_CHECK(kdata.empty() == false);
180  BOOST_CHECK(kdata.startPos() == total - 1);
181  BOOST_CHECK(kdata.endPos() == total);
182  BOOST_CHECK(kdata.lastPos() == total - 1);
183  record = kdata[0];
184  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
185  BOOST_CHECK(record == expect);
186 
188  total = stock.getCount();
189  query = KQuery(-(hku_int64)total);
190  kdata = stock.getKData(query);
191  BOOST_CHECK(kdata.size() == 5121);
192  BOOST_CHECK(kdata.empty() == false);
193  BOOST_CHECK(kdata.startPos() == 0);
194  BOOST_CHECK(kdata.endPos() == total);
195  BOOST_CHECK(kdata.lastPos() == total - 1);
196  record = kdata[0];
197  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
198  BOOST_CHECK(record == expect);
199 
200  record = kdata[kdata.size()-1];
201  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
202  BOOST_CHECK(record == expect);
203 
205  total = stock.getCount();
206  query = KQuery(-1-(hku_int64)total);
207  kdata = stock.getKData(query);
208  BOOST_CHECK(kdata.size() == 5121);
209  BOOST_CHECK(kdata.empty() == false);
210  BOOST_CHECK(kdata.startPos() == 0);
211  BOOST_CHECK(kdata.endPos() == total);
212  BOOST_CHECK(kdata.lastPos() == total - 1);
213  record = kdata[0];
214  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
215  BOOST_CHECK(record == expect);
216 
217  record = kdata[kdata.size()-1];
218  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
219  BOOST_CHECK(record == expect);
220 
222  total = stock.getCount();
223  query = KQuery(1-(hku_int64)total);
224  kdata = stock.getKData(query);
225  BOOST_CHECK(kdata.size() == 5120);
226  BOOST_CHECK(kdata.empty() == false);
227  BOOST_CHECK(kdata.startPos() == 1);
228  BOOST_CHECK(kdata.endPos() == total);
229  BOOST_CHECK(kdata.lastPos() == total - 1);
230  record = kdata[0];
231  expect = KRecord(Datetime(199012200000), 104.3, 104.39, 99.98, 104.39, 8.4, 197);
232  BOOST_CHECK(record == expect);
233 
234  record = kdata[kdata.size()-1];
235  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
236  BOOST_CHECK(record == expect);
237 
239  total = stock.getCount();
240  query = KQuery(-2, -1);
241  kdata = stock.getKData(query);
242  BOOST_CHECK(kdata.size() == 1);
243  BOOST_CHECK(kdata.empty() == false);
244  BOOST_CHECK(kdata.startPos() == total - 2);
245  BOOST_CHECK(kdata.endPos() == total -1);
246  BOOST_CHECK(kdata.lastPos() == total - 2);
247  record = kdata[0];
248  expect = KRecord(Datetime(201112050000), 2363.111, 2363.127, 2327.61, 2333.229, 4864121.6, 52214970);
249  BOOST_CHECK(record == expect);
250 
252  query = KQuery(-10, -2);
253  kdata = stock.getKData(query);
254  BOOST_CHECK(kdata.size() == 8);
255  BOOST_CHECK(kdata.empty() == false);
256  BOOST_CHECK(kdata.startPos() == total - 10);
257  BOOST_CHECK(kdata.endPos() == total -2);
258  BOOST_CHECK(kdata.lastPos() == total - 2 - 1);
259  record = kdata[0];
260  expect = KRecord(Datetime(201111230000), 2415.197, 2418.56, 2390.654, 2395.065, 5004336, 50547851);
261  BOOST_CHECK(record == expect);
262 
263  record = kdata[kdata.size()-1];
264  expect = KRecord(Datetime(201112020000), 2374.899, 2378.299, 2344.846, 2360.664, 5732015.7, 59868846);
265  BOOST_CHECK(record == expect);
266 
268  query = KQuery(-1, 1);
269  kdata = stock.getKData(query);
270  BOOST_CHECK(kdata.size() == 0);
271  BOOST_CHECK(kdata.empty() == true);
272  BOOST_CHECK(kdata.startPos() == 0);
273  BOOST_CHECK(kdata.endPos() == 0);
274  BOOST_CHECK(kdata.lastPos() == 0);
275 
277  query = KQuery(-(hku_int64)total, 1);
278  kdata = stock.getKData(query);
279  BOOST_CHECK(kdata.size() == 1);
280  BOOST_CHECK(kdata.empty() == false);
281  BOOST_CHECK(kdata.startPos() == 0);
282  BOOST_CHECK(kdata.endPos() == 1);
283  BOOST_CHECK(kdata.lastPos() == 0);
284  record = kdata[0];
285  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.980, 49.4, 1260);
286  BOOST_CHECK(record == expect);
287 
289  query = KQuery(-(hku_int64)total, 2);
290  kdata = stock.getKData(query);
291  BOOST_CHECK(kdata.size() == 2);
292  BOOST_CHECK(kdata.empty() == false);
293  BOOST_CHECK(kdata.startPos() == 0);
294  BOOST_CHECK(kdata.endPos() == 2);
295  BOOST_CHECK(kdata.lastPos() == 1);
296  record = kdata[0];
297  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.980, 49.4, 1260);
298  BOOST_CHECK(record == expect);
299 
300  record = kdata[kdata.size()-1];
301  BOOST_CHECK(record.datetime == Datetime(199012200000));
302 
304  query = KQuery(0, -(hku_int64)total);
305  kdata = stock.getKData(query);
306  BOOST_CHECK(kdata.size() == 0);
307  BOOST_CHECK(kdata.empty() == true);
308  BOOST_CHECK(kdata.startPos() == 0);
309  BOOST_CHECK(kdata.endPos() == 0);
310  BOOST_CHECK(kdata.lastPos() == 0);
311 
313  query = KQuery(1, -1);
314  kdata = stock.getKData(query);
315  BOOST_CHECK(kdata.size() == 5119);
316  BOOST_CHECK(kdata.empty() == false);
317  BOOST_CHECK(kdata.startPos() == 1);
318  BOOST_CHECK(kdata.endPos() == total - 1);
319  BOOST_CHECK(kdata.lastPos() == total - 2);
320  record = kdata[0];
321  expect = KRecord(Datetime(199012200000), 104.3, 104.39, 99.98, 104.39, 8.4, 197);
322  BOOST_CHECK(record == expect);
323 
324  record = kdata[kdata.size()-1];
325  expect = KRecord(Datetime(201112050000), 2363.111, 2363.127, 2327.61, 2333.229, 4864121.6, 52214970);
326  BOOST_CHECK(record == expect);
327 
328 
332 
333  query = KQuery(0, Null<hku_int64>(), KQuery::MIN);
334  kdata = stock.getKData(query);
335  BOOST_CHECK(kdata.size() == 682823L);
336  record = kdata[0];
337  expect = KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158);
338  BOOST_CHECK(record == expect);
339 
340  record = kdata[kdata.size()-1];
341  expect = KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.90, 5215150, 566312);
342  BOOST_CHECK(record == expect);
343 
345  total = stock.getCount(KQuery::MIN);
346  query = KQuery(total - 1, Null<hku_int64>(), KQuery::MIN);
347  kdata = stock.getKData(query);
348  BOOST_CHECK(kdata.size() == 1);
349  record = kdata[0];
350  expect = KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.90, 5215150, 566312);
351  BOOST_CHECK(record == expect);
352 
354  total = stock.getCount(KQuery::MIN);
355  query = KQuery(total, Null<hku_int64>(), KQuery::MIN);
356  kdata = stock.getKData(query);
357  BOOST_CHECK(kdata.size() == 0);
358 
360  query = KQuery(0, 1, KQuery::MIN);
361  kdata = stock.getKData(query);
362  BOOST_CHECK(kdata.size() == 1);
363  record = kdata[0];
364  expect = KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158);
365  BOOST_CHECK(record == expect);
366 
368  query = KQuery(1, 2, KQuery::MIN);
369  kdata = stock.getKData(query);
370  BOOST_CHECK(kdata.size() == 1);
371  record = kdata[0];
372  BOOST_CHECK(record.datetime == Datetime(200001040932));
373 
375  query = KQuery(1, 10, KQuery::MIN);
376  kdata = stock.getKData(query);
377  BOOST_CHECK(kdata.size() == 9);
378  record = kdata[0];
379  BOOST_CHECK(record.datetime == Datetime(200001040932));
380 
381  record = kdata[kdata.size()-1];
382  BOOST_CHECK(record.datetime == Datetime(200001040940));
383 
385  total = stock.getCount(KQuery::MIN);
386  query = KQuery(total - 1, total, KQuery::MIN);
387  kdata = stock.getKData(query);
388  BOOST_CHECK(kdata.size() == 1);
389  record = kdata[0];
390  BOOST_CHECK(record.datetime == Datetime(201112061500));
391 
393  query = KQuery(0, 0, KQuery::MIN);
394  kdata = stock.getKData(query);
395  BOOST_CHECK(kdata.size() == 0);
396 
398  query = KQuery(1, 1, KQuery::MIN);
399  kdata = stock.getKData(query);
400  BOOST_CHECK(kdata.size() == 0);
401 
403  total = stock.getCount(KQuery::MIN);
404  query = KQuery(total-1, total-1, KQuery::MIN);
405  kdata = stock.getKData(query);
406  BOOST_CHECK(kdata.size() == 0);
407 
409  query = KQuery(-1, Null<hku_int64>(), KQuery::MIN);
410  kdata = stock.getKData(query);
411  BOOST_CHECK(kdata.size() == 1);
412  record = kdata[0];
413  BOOST_CHECK(record.datetime == Datetime(201112061500));
414 
416  total = stock.getCount(KQuery::MIN);
417  query = KQuery(-(hku_int64)total, Null<hku_int64>(), KQuery::MIN);
418  kdata = stock.getKData(query);
419  BOOST_CHECK(kdata.size() == 682823);
420  record = kdata[0];
421  BOOST_CHECK(record.datetime == Datetime(200001040931));
422 
423  record = kdata[kdata.size()-1];
424  BOOST_CHECK(record.datetime == Datetime(201112061500));
425 
427  total = stock.getCount(KQuery::MIN);
428  query = KQuery(-1-(hku_int64)total, Null<hku_int64>(), KQuery::MIN);
429  kdata = stock.getKData(query);
430  BOOST_CHECK(kdata.size() == 682823);
431  record = kdata[0];
432  BOOST_CHECK(record.datetime == Datetime(200001040931));
433 
434  record = kdata[kdata.size() - 1];
435  BOOST_CHECK(record.datetime == Datetime(201112061500));
436 
438  total = stock.getCount(KQuery::MIN);
439  query = KQuery(1-(hku_int64)total, Null<hku_int64>(), KQuery::MIN);
440  kdata = stock.getKData(query);
441  BOOST_CHECK(kdata.size() == 682822);
442  record = kdata[0];
443  BOOST_CHECK(record.datetime == Datetime(200001040932));
444 
445  record = kdata[kdata.size() - 1 ];
446  BOOST_CHECK(record.datetime == Datetime(201112061500));
447 
449  query = KQuery(-2, -1, KQuery::MIN);
450  kdata = stock.getKData(query);
451  BOOST_CHECK(kdata.size() == 1);
452  record = kdata[0];
453  BOOST_CHECK(record.datetime == Datetime(201112061459));
454 
456  query = KQuery(-10, -2, KQuery::MIN);
457  kdata = stock.getKData(query);
458  BOOST_CHECK(kdata.size() == 8);
459  record = kdata[0];
460  BOOST_CHECK(record.datetime == Datetime(201112061451));
461 
462  record = kdata[kdata.size()-1];
463  BOOST_CHECK(record.datetime == Datetime(201112061458));
464 
466  query = KQuery(-1, 1, KQuery::MIN);
467  kdata = stock.getKData(query);
468  BOOST_CHECK(kdata.size() == 0);
469 
471  query = KQuery(-(hku_int64)total, 1, KQuery::MIN);
472  kdata = stock.getKData(query);
473  BOOST_CHECK(kdata.size() == 1);
474  record = kdata[0];
475  BOOST_CHECK(record.datetime == Datetime(200001040931));
476 
478  query = KQuery(-(hku_int64)total, 2, KQuery::MIN);
479  kdata = stock.getKData(query);
480  BOOST_CHECK(kdata.size() == 2);
481  record = kdata[0];
482  BOOST_CHECK(record.datetime == Datetime(200001040931));
483 
484  record = kdata[kdata.size()-1];
485  BOOST_CHECK(record.datetime == Datetime(200001040932));
486 
488  query = KQuery(0, -(hku_int64)total, KQuery::MIN);
489  kdata = stock.getKData(query);
490  BOOST_CHECK(kdata.size() == 0);
491 
493  query = KQuery(1, -1, KQuery::MIN);
494  kdata = stock.getKData(query);
495  BOOST_CHECK(kdata.size() == 682821);
496  record = kdata[0];
497  BOOST_CHECK(record.datetime == Datetime(200001040932));
498 
499  record = kdata[kdata.size()-1];
500  BOOST_CHECK(record.datetime == Datetime(201112061459));
501 
502 
504  query = KQuery(1,3, KQuery::WEEK);
505  kdata = stock.getKData(query);
506  BOOST_CHECK(kdata.size() == 2);
507  BOOST_CHECK(kdata.empty() == false);
508  BOOST_CHECK(kdata.startPos() == 1);
509  BOOST_CHECK(kdata.endPos() == 3);
510  BOOST_CHECK(kdata.lastPos() == 2);
511  BOOST_CHECK(kdata[0] == KRecord(Datetime(199012240000), 113.57, 126.45, 109.13, 126.45, 28.2, 321));
512  BOOST_CHECK(kdata[1] == KRecord(Datetime(199012310000), 126.56, 131.44, 126.48, 131.44, 47.3, 730));
513 
515  query = KQuery(1,4, KQuery::MONTH);
516  kdata = stock.getKData(query);
517  BOOST_CHECK(kdata.size() == 3);
518  BOOST_CHECK(kdata.empty() == false);
519  BOOST_CHECK(kdata.startPos() == 1);
520  BOOST_CHECK(kdata.endPos() == 4);
521  BOOST_CHECK(kdata.lastPos() == 3);
522  BOOST_CHECK(kdata[0] == KRecord(Datetime(199101010000), 127.61, 135.19, 127.61, 129.97, 3637.1, 67197));
523  BOOST_CHECK(kdata[1] == KRecord(Datetime(199102010000), 129.5, 134.87, 128.06, 133.01, 3027.3, 50982));
524  BOOST_CHECK(kdata[2] == KRecord(Datetime(199103010000), 132.53, 132.53, 120.11, 120.19, 1725.3, 24528));
525 
527  query = KQuery(1,4, KQuery::QUARTER);
528  kdata = stock.getKData(query);
529  BOOST_CHECK(kdata.size() == 3);
530  BOOST_CHECK(kdata.empty() == false);
531  BOOST_CHECK(kdata.startPos() == 1);
532  BOOST_CHECK(kdata.endPos() == 4);
533  BOOST_CHECK(kdata.lastPos() == 3);
534  BOOST_CHECK(kdata[0] == KRecord(Datetime(199101010000), 127.61, 135.19, 120.11, 120.19, 8389.7, 142707));
535  BOOST_CHECK(kdata[1] == KRecord(Datetime(199104010000), 120.69, 137.56, 104.96, 137.56, 12095.6, 222753));
536  BOOST_CHECK(kdata[2] == KRecord(Datetime(199107010000), 136.64, 191.18, 131.87, 180.92, 32436.9, 527079));
537 
539  query = KQuery(1,4, KQuery::MIN5);
540  kdata = stock.getKData(query);
541  BOOST_CHECK(kdata.size() == 3);
542  BOOST_CHECK(kdata.empty() == false);
543  BOOST_CHECK(kdata.startPos() == 1);
544  BOOST_CHECK(kdata.endPos() == 4);
545  BOOST_CHECK(kdata.lastPos() == 3);
546  BOOST_CHECK(kdata[0] == KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389, 70687.3, 251473));
547  BOOST_CHECK(kdata[1] == KRecord(Datetime(200001040945), 1367.389, 1367.389, 1364.645, 1364.763, 73577.1, 223346));
548  BOOST_CHECK(kdata[2] == KRecord(Datetime(200001040950), 1364.763, 1364.763, 1363.128, 1363.192, 65066.3, 167971));
549 
551  query = KQuery(1,4, KQuery::MIN15);
552  kdata = stock.getKData(query);
553  BOOST_CHECK(kdata.size() == 3);
554  BOOST_CHECK(kdata.empty() == false);
555  BOOST_CHECK(kdata.startPos() == 1);
556  BOOST_CHECK(kdata.endPos() == 4);
557  BOOST_CHECK(kdata.lastPos() == 3);
558  BOOST_CHECK(kdata[0] == KRecord(Datetime(200001041000), 1364.7630, 1364.7630, 1361.4590, 1361.4590, 204277.1000, 457452.0000));
559  BOOST_CHECK(kdata[1] == KRecord(Datetime(200001041015), 1361.5580, 1366.0930, 1361.2950, 1365.9270, 307531.8000, 548313.0000));
560  BOOST_CHECK(kdata[2] == KRecord(Datetime(200001041030), 1366.0430, 1367.6830, 1365.9460, 1367.6830, 279102.7000, 451981.0000));
561 
562 }
563 
564 
566 BOOST_AUTO_TEST_CASE( test_getKData_by_date ) {
567  StockManager& sm = StockManager::instance();
568  Stock stock;
569  KData kdata;
570  KRecord record, expect;
571  KQuery query;
572  size_t total;
573 
577 
579  stock = sm.getStock("sh000001");
580  total = stock.getCount();
581  query = KQueryByDate();
582  kdata = stock.getKData(query);
583  BOOST_CHECK(kdata.size() == total);
584  BOOST_CHECK(kdata.size() == 5121);
585  BOOST_CHECK(kdata.empty() == false);
586  BOOST_CHECK(kdata.startPos() == 0);
587  BOOST_CHECK(kdata.endPos() == total);
588  BOOST_CHECK(kdata.lastPos() == total - 1);
589  record = kdata[0];
590  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
591  BOOST_CHECK(record == expect);
592 
593  record = kdata[1];
594  expect = KRecord(Datetime(199012200000), 104.3, 104.39, 99.98, 104.39, 8.4, 197);
595  BOOST_CHECK(record == expect);
596 
597  record = kdata[kdata.size()-1];
598  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
599  BOOST_CHECK(record == expect);
600 
602  stock = sm.getStock("sh000001");
603  query = KQueryByDate(Datetime(199012180000));
604  kdata = stock.getKData(query);
605  BOOST_CHECK(kdata.size() == 5121);
606  BOOST_CHECK(kdata.empty() == false);
607  BOOST_CHECK(kdata.startPos() == 0);
608  BOOST_CHECK(kdata.endPos() == total);
609  BOOST_CHECK(kdata.lastPos() == total - 1);
610  record = kdata[0];
611  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
612  BOOST_CHECK(record == expect);
613 
614  record = kdata[kdata.size()-1];
615  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
616  BOOST_CHECK(record == expect);
617 
619  stock = sm.getStock("sh000001");
620  query = KQueryByDate(Datetime(199012190000));
621  kdata = stock.getKData(query);
622  BOOST_CHECK(kdata.size() == 5121);
623  BOOST_CHECK(kdata.empty() == false);
624  BOOST_CHECK(kdata.startPos() == 0);
625  BOOST_CHECK(kdata.endPos() == total);
626  BOOST_CHECK(kdata.lastPos() == total - 1);
627  record = kdata[0];
628  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
629  BOOST_CHECK(record == expect);
630 
631  record = kdata[kdata.size()-1];
632  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
633  BOOST_CHECK(record == expect);
634 
636  stock = sm.getStock("sh000001");
637  query = KQueryByDate(Datetime(199012200000));
638  kdata = stock.getKData(query);
639  BOOST_CHECK(kdata.size() == 5120);
640  BOOST_CHECK(kdata.empty() == false);
641  BOOST_CHECK(kdata.startPos() == 1);
642  BOOST_CHECK(kdata.endPos() == total);
643  BOOST_CHECK(kdata.lastPos() == total - 1);
644  record = kdata[0];
645  BOOST_CHECK(record.datetime == Datetime(199012200000));
646 
647  record = kdata[kdata.size()-1];
648  BOOST_CHECK(record.datetime == Datetime(201112060000));
649 
651  stock = sm.getStock("sh000001");
652  query = KQueryByDate(Datetime(199012190000), Datetime(201112050000));
653  kdata = stock.getKData(query);
654  BOOST_CHECK(kdata.size() == 5119);
655  BOOST_CHECK(kdata.empty() == false);
656  BOOST_CHECK(kdata.startPos() == 0);
657  BOOST_CHECK(kdata.endPos() == total - 2);
658  BOOST_CHECK(kdata.lastPos() == total - 3);
659  record = kdata[0];
660  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
661  BOOST_CHECK(record == expect);
662 
663  record = kdata[kdata.size()-1];
664  BOOST_CHECK(record == KRecord(Datetime(201112020000), 2374.8990, 2378.2990, 2344.8460, 2360.6640, 5732015.7000, 59868846.0000));
665 
667  stock = sm.getStock("sh000001");
668  query = KQueryByDate(Datetime(199012190000), Datetime(201112060000));
669  kdata = stock.getKData(query);
670  BOOST_CHECK(kdata.size() == 5120);
671  BOOST_CHECK(kdata.empty() == false);
672  BOOST_CHECK(kdata.startPos() == 0);
673  BOOST_CHECK(kdata.endPos() == total - 1);
674  BOOST_CHECK(kdata.lastPos() == total - 2);
675  record = kdata[0];
676  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
677  BOOST_CHECK(record == expect);
678 
679  record = kdata[kdata.size()-1];
680  BOOST_CHECK(record == KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2327.6100, 2333.2290, 4864121.6000, 52214970.0000));
681 
683  stock = sm.getStock("sh000001");
684  query = KQueryByDate(Datetime(199012190000), Datetime(201112070000));
685  kdata = stock.getKData(query);
686  BOOST_CHECK(kdata.size() == 5121);
687  BOOST_CHECK(kdata.empty() == false);
688  BOOST_CHECK(kdata.startPos() == 0);
689  BOOST_CHECK(kdata.endPos() == total);
690  BOOST_CHECK(kdata.lastPos() == total - 1);
691  record = kdata[0];
692  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
693  BOOST_CHECK(record == expect);
694 
695  record = kdata[kdata.size()-1];
696  BOOST_CHECK(record == KRecord(Datetime(201112060000), 2326.6600, 2331.8920, 2310.1550, 2325.9050, 4262559.5000, 45917078.0000));
697 
699  stock = sm.getStock("sh000001");
700  query = KQueryByDate(Datetime(199510180000), Datetime(199510240000));
701  kdata = stock.getKData(query);
702  BOOST_CHECK(kdata.size() == 4);
703  BOOST_CHECK(kdata.empty() == false);
704  BOOST_CHECK(kdata.startPos() == 1210);
705  BOOST_CHECK(kdata.endPos() == 1214);
706  BOOST_CHECK(kdata.lastPos() == 1213);
707  record = kdata[0];
708  BOOST_CHECK(record == KRecord(Datetime(199510180000), 705.7200, 716.8300, 705.7200, 716.8300, 232685.5000, 4273054.0000));
709 
710  record = kdata[kdata.size()-1];
711  BOOST_CHECK(record == KRecord(Datetime(199510230000), 729.7600, 729.9700, 718.4400, 723.0900, 235482.7000, 3877994.0000));
712 
714  stock = sm.getStock("sh000001");
715  query = KQueryByDate(Datetime(199001010000), Datetime(199001010000));
716  kdata = stock.getKData(query);
717  BOOST_CHECK(kdata.size() == 0);
718  BOOST_CHECK(kdata.empty() == true);
719  BOOST_CHECK(kdata.startPos() == 0);
720  BOOST_CHECK(kdata.endPos() == 0);
721  BOOST_CHECK(kdata.lastPos() == 0);
722 
723  query = KQueryByDate(Datetime(199012190000), Datetime(199012190000));
724  kdata = stock.getKData(query);
725  BOOST_CHECK(kdata.size() == 0);
726  BOOST_CHECK(kdata.empty() == true);
727  BOOST_CHECK(kdata.startPos() == 0);
728  BOOST_CHECK(kdata.endPos() == 0);
729  BOOST_CHECK(kdata.lastPos() == 0);
730 
731  query = KQueryByDate(Datetime(199510240000), Datetime(199510240000));
732  kdata = stock.getKData(query);
733  BOOST_CHECK(kdata.size() == 0);
734  BOOST_CHECK(kdata.empty() == true);
735  BOOST_CHECK(kdata.startPos() == 0);
736  BOOST_CHECK(kdata.endPos() == 0);
737  BOOST_CHECK(kdata.lastPos() == 0);
738 
739  query = KQueryByDate(Datetime(201112060000), Datetime(201112060000));
740  kdata = stock.getKData(query);
741  BOOST_CHECK(kdata.size() == 0);
742  BOOST_CHECK(kdata.empty() == true);
743  BOOST_CHECK(kdata.startPos() == 0);
744  BOOST_CHECK(kdata.endPos() == 0);
745  BOOST_CHECK(kdata.lastPos() == 0);
746 
748  stock = sm.getStock("sh000001");
749  query = KQueryByDate(Datetime(199012190000), Datetime(199012200000));
750  kdata = stock.getKData(query);
751  BOOST_CHECK(kdata.size() == 1);
752  BOOST_CHECK(kdata.empty() == false);
753  BOOST_CHECK(kdata.startPos() == 0);
754  BOOST_CHECK(kdata.endPos() == 1);
755  BOOST_CHECK(kdata.lastPos() == 0);
756  record = kdata[0];
757  BOOST_CHECK(record == KRecord(Datetime(199012190000), 96.0500, 99.9800, 95.7900, 99.9800, 49.4000, 1260.0000));
758 
759  query = KQueryByDate(Datetime(201111140000), Datetime(201111150000));
760  kdata = stock.getKData(query);
761  BOOST_CHECK(kdata.size() == 1);
762  BOOST_CHECK(kdata.empty() == false);
763  BOOST_CHECK(kdata.startPos() == 5104);
764  BOOST_CHECK(kdata.endPos() == 5105);
765  BOOST_CHECK(kdata.lastPos() == 5104);
766  record = kdata[0];
767  BOOST_CHECK(record == KRecord(Datetime(201111140000), 2498.6720, 2529.6320, 2496.3350, 2528.7140, 8252378.1000, 81229813.0000));
768 
769  query = KQueryByDate(Datetime(201112060000), Datetime(201112070000));
770  kdata = stock.getKData(query);
771  BOOST_CHECK(kdata.size() == 1);
772  BOOST_CHECK(kdata.empty() == false);
773  BOOST_CHECK(kdata.startPos() == 5120);
774  BOOST_CHECK(kdata.endPos() == 5121);
775  BOOST_CHECK(kdata.lastPos() == 5120);
776  record = kdata[0];
777  BOOST_CHECK(record == KRecord(Datetime(201112060000), 2326.6600, 2331.8920, 2310.1550, 2325.9050, 4262559.5000, 45917078.0000));
778 
779 
783 
784  total = stock.getCount(KQuery::WEEK);
785  query = KQueryByDate(Datetime(199012160000), Null<Datetime>(), KQuery::WEEK);
786  kdata = stock.getKData(query);
787  BOOST_CHECK(kdata.size() == total);
788  BOOST_CHECK(kdata.empty() == false);
789  BOOST_CHECK(kdata.startPos() == 0);
790  BOOST_CHECK(kdata.endPos() == total);
791  BOOST_CHECK(kdata.lastPos() == total - 1);
792  BOOST_CHECK(kdata[0] == KRecord(Datetime(199012170000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000));
793  BOOST_CHECK(kdata[1] == KRecord(Datetime(199012240000), 113.5700, 126.4500, 109.1300, 126.4500, 28.2000, 321.0000));
794  BOOST_CHECK(kdata[kdata.size()-1] == KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
795 
797  stock = sm.getStock("sh000001");
798  query = KQueryByDate(Datetime(199012170000), Null<Datetime>(), KQuery::WEEK);
799  kdata = stock.getKData(query);
800  BOOST_CHECK(kdata.size() == total);
801  BOOST_CHECK(kdata.empty() == false);
802  BOOST_CHECK(kdata.startPos() == 0);
803  BOOST_CHECK(kdata.endPos() == total);
804  BOOST_CHECK(kdata.lastPos() == total - 1);
805  BOOST_CHECK(kdata[0] == KRecord(Datetime(199012170000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000));
806  BOOST_CHECK(kdata[10] == KRecord(Datetime(199102250000), 134.3700, 134.8700, 132.4700, 132.5300, 827.1000, 11500.0000));
807  BOOST_CHECK(kdata[kdata.size()-1] == KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
808 
810  stock = sm.getStock("sh000001");
811  query = KQueryByDate(Datetime(199012180000), Null<Datetime>(), KQuery::WEEK);
812  kdata = stock.getKData(query);
813  BOOST_CHECK(kdata.size() == total - 1);
814  BOOST_CHECK(kdata.empty() == false);
815  BOOST_CHECK(kdata.startPos() == 1);
816  BOOST_CHECK(kdata.endPos() == total);
817  BOOST_CHECK(kdata.lastPos() == total - 1);
818  BOOST_CHECK(kdata[0] == KRecord(Datetime(199012240000), 113.5700, 126.4500, 109.1300, 126.4500, 28.2000, 321.0000));
819  BOOST_CHECK(kdata[1] == KRecord(Datetime(199012310000), 126.5600, 131.4400, 126.4800, 131.4400, 47.3000, 730.0000));
820  BOOST_CHECK(kdata[kdata.size()-1] == KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
821 
823  stock = sm.getStock("sh000001");
824  query = KQueryByDate(Datetime(199012170000), Datetime(201112040000), KQuery::WEEK);
825  kdata = stock.getKData(query);
826  BOOST_CHECK(kdata.size() == total - 1);
827  BOOST_CHECK(kdata.empty() == false);
828  BOOST_CHECK(kdata.startPos() == 0);
829  BOOST_CHECK(kdata.endPos() == total - 1);
830  BOOST_CHECK(kdata.lastPos() == total - 2);
831  BOOST_CHECK(kdata[0] == KRecord(Datetime(199012170000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000));
832  BOOST_CHECK(kdata[kdata.size()-1] == KRecord(Datetime(201111280000), 2383.8930, 2423.5590, 2319.4400, 2360.6640, 32821965.5000, 336317856.0000));
833 
835  query = KQueryByDate(Datetime(199012170000), Datetime(201112050000), KQuery::WEEK);
836  kdata = stock.getKData(query);
837  BOOST_CHECK(kdata.size() == total - 1);
838  BOOST_CHECK(kdata.empty() == false);
839  BOOST_CHECK(kdata.startPos() == 0);
840  BOOST_CHECK(kdata.endPos() == total - 1);
841  BOOST_CHECK(kdata.lastPos() == total - 2);
842  BOOST_CHECK(kdata[0] == KRecord(Datetime(199012170000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000));
843  BOOST_CHECK(kdata[kdata.size()-1] == KRecord(Datetime(201111280000), 2383.8930, 2423.5590, 2319.4400, 2360.6640, 32821965.5000, 336317856.0000));
844 
846  query = KQueryByDate(Datetime(199012170000), Datetime(201112060000), KQuery::WEEK);
847  kdata = stock.getKData(query);
848  BOOST_CHECK(kdata.size() == total);
849  BOOST_CHECK(kdata.empty() == false);
850  BOOST_CHECK(kdata.startPos() == 0);
851  BOOST_CHECK(kdata.endPos() == total);
852  BOOST_CHECK(kdata.lastPos() == total - 1);
853  BOOST_CHECK(kdata[0] == KRecord(Datetime(199012170000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000));
854  BOOST_CHECK(kdata[kdata.size()-1] == KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
855 
857  stock = sm.getStock("sh000001");
858  query = KQueryByDate(Datetime(201108150000), Datetime(201111070000), KQuery::WEEK);
859  kdata = stock.getKData(query);
860  BOOST_CHECK(kdata.size() == 11);
861  BOOST_CHECK(kdata.empty() == false);
862  BOOST_CHECK(kdata.startPos() == 1043);
863  BOOST_CHECK(kdata.endPos() == 1054);
864  BOOST_CHECK(kdata.lastPos() == 1053);
865  BOOST_CHECK(kdata[0] == KRecord(Datetime(201108150000), 2598.1380, 2636.3600, 2513.7540, 2534.3580, 40330572.2000, 385608932.0000));
866  BOOST_CHECK(kdata[kdata.size()-1] == KRecord(Datetime(201110310000), 2470.2540, 2536.7790, 2433.7150, 2528.2940, 50520578.9000, 516983184.0000));
867 
869  stock = sm.getStock("sh000001");
870  query = KQueryByDate(Datetime(199012170000), Datetime(199012170000), KQuery::WEEK);
871  kdata = stock.getKData(query);
872  BOOST_CHECK(kdata.size() == 0);
873  BOOST_CHECK(kdata.empty() == true);
874  BOOST_CHECK(kdata.startPos() == 0);
875  BOOST_CHECK(kdata.endPos() == 0);
876  BOOST_CHECK(kdata.lastPos() == 0);
877 
878  query = KQueryByDate(Datetime(199104220000), Datetime(199104220000), KQuery::WEEK);
879  kdata = stock.getKData(query);
880  BOOST_CHECK(kdata.size() == 0);
881  BOOST_CHECK(kdata.empty() == true);
882  BOOST_CHECK(kdata.startPos() == 0);
883  BOOST_CHECK(kdata.endPos() == 0);
884  BOOST_CHECK(kdata.lastPos() == 0);
885 
886  query = KQueryByDate(Datetime(199507170000), Datetime(199507170000), KQuery::WEEK);
887  kdata = stock.getKData(query);
888  BOOST_CHECK(kdata.size() == 0);
889  BOOST_CHECK(kdata.empty() == true);
890  BOOST_CHECK(kdata.startPos() == 0);
891  BOOST_CHECK(kdata.endPos() == 0);
892  BOOST_CHECK(kdata.lastPos() == 0);
893 
894  query = KQueryByDate(Datetime(201112050000), Datetime(201112050000), KQuery::WEEK);
895  kdata = stock.getKData(query);
896  BOOST_CHECK(kdata.size() == 0);
897  BOOST_CHECK(kdata.empty() == true);
898  BOOST_CHECK(kdata.startPos() == 0);
899  BOOST_CHECK(kdata.endPos() == 0);
900  BOOST_CHECK(kdata.lastPos() == 0);
901 
903  stock = sm.getStock("sh000001");
904  query = KQueryByDate(Datetime(199012170000), Datetime(199012240000), KQuery::WEEK);
905  kdata = stock.getKData(query);
906  BOOST_CHECK(kdata.size() == 1);
907  BOOST_CHECK(kdata.empty() == false);
908  BOOST_CHECK(kdata.startPos() == 0);
909  BOOST_CHECK(kdata.endPos() == 1);
910  BOOST_CHECK(kdata.lastPos() == 0);
911  BOOST_CHECK(kdata[0] == KRecord(Datetime(199012170000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000));
912 
913  query = KQueryByDate(Datetime(199707210000), Datetime(199707280000), KQuery::WEEK);
914  kdata = stock.getKData(query);
915  BOOST_CHECK(kdata.size() == 1);
916  BOOST_CHECK(kdata.empty() == false);
917  BOOST_CHECK(kdata.startPos() == 338);
918  BOOST_CHECK(kdata.endPos() == 339);
919  BOOST_CHECK(kdata.lastPos() == 338);
920  BOOST_CHECK(kdata[0] == KRecord(Datetime(199707210000), 1215.8390, 1223.8230, 1158.1360, 1170.8620, 2433586.7000, 20739544.0000));
921 
922  query = KQueryByDate(Datetime(201112050000), Datetime(201112060000), KQuery::WEEK);
923  kdata = stock.getKData(query);
924  BOOST_CHECK(kdata.size() == 1);
925  BOOST_CHECK(kdata.empty() == false);
926  BOOST_CHECK(kdata.startPos() == 1058);
927  BOOST_CHECK(kdata.endPos() == 1059);
928  BOOST_CHECK(kdata.lastPos() == 1058);
929  BOOST_CHECK(kdata[0] == KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
930 
931 
935 
936  stock = sm.getStock("sh000001");
937  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::MIN);
938  kdata = stock.getKData(query);
939  BOOST_CHECK(kdata.size() == 682823L);
940  record = kdata[0];
941  expect = KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158);
942  BOOST_CHECK(record == expect);
943 
944  record = kdata[1];
945  expect = KRecord(Datetime(200001040932), 1368.3, 1368.491, 1368.3, 1368.491, 2783200, 106916);
946  BOOST_CHECK(record == expect);
947 
948  record = kdata[kdata.size()-1];
949  expect = KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.90, 5215150, 566312);
950  BOOST_CHECK(record == expect);
951 
953  stock = sm.getStock("sh000001");
954  query = KQueryByDate(Datetime(200001040930), Null<Datetime>(), KQuery::MIN);
955  kdata = stock.getKData(query);
956  BOOST_CHECK(kdata.size() == 682823L);
957  record = kdata[0];
958  expect = KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158);
959  BOOST_CHECK(record == expect);
960 
961  record = kdata[1];
962  expect = KRecord(Datetime(200001040932), 1368.3, 1368.491, 1368.3, 1368.491, 2783200, 106916);
963  BOOST_CHECK(record == expect);
964 
965  record = kdata[kdata.size()-1];
966  expect = KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.90, 5215150, 566312);
967  BOOST_CHECK(record == expect);
968 
970  stock = sm.getStock("sh000001");
971  query = KQueryByDate(Datetime(200001040931), Null<Datetime>(), KQuery::MIN);
972  kdata = stock.getKData(query);
973  BOOST_CHECK(kdata.size() == 682823L);
974  record = kdata[0];
975  BOOST_CHECK(record.datetime == Datetime(200001040931));
976 
977  record = kdata[kdata.size()-1];
978  BOOST_CHECK(record.datetime == Datetime(201112061500));
979 
980 
982  stock = sm.getStock("sh000001");
983  query = KQueryByDate(Datetime(200001040932), Null<Datetime>(), KQuery::MIN);
984  kdata = stock.getKData(query);
985  BOOST_CHECK(kdata.size() == 682822L);
986  record = kdata[0];
987  BOOST_CHECK(record.datetime == Datetime(200001040932));
988 
989  record = kdata[kdata.size()-1];
990  BOOST_CHECK(record.datetime == Datetime(201112061500));
991 
993  stock = sm.getStock("sh000001");
994  query = KQueryByDate(Datetime(200001040931), Datetime(201112061459), KQuery::MIN);
995  kdata = stock.getKData(query);
996  BOOST_CHECK(kdata.size() == 682821L);
997  record = kdata[0];
998  BOOST_CHECK(record.datetime == Datetime(200001040931));
999 
1000  record = kdata[kdata.size()-1];
1001  BOOST_CHECK(record.datetime == Datetime(201112061458));
1002 
1004  stock = sm.getStock("sh000001");
1005  query = KQueryByDate(Datetime(200001040931), Datetime(201112061500), KQuery::MIN);
1006  kdata = stock.getKData(query);
1007  BOOST_CHECK(kdata.size() == 682822L);
1008  record = kdata[0];
1009  BOOST_CHECK(record.datetime == Datetime(200001040931));
1010 
1011  record = kdata[kdata.size()-1];
1012  BOOST_CHECK(record.datetime == Datetime(201112061459));
1013 
1015  stock = sm.getStock("sh000001");
1016  query = KQueryByDate(Datetime(200001040931), Datetime(201112061501), KQuery::MIN);
1017  kdata = stock.getKData(query);
1018  BOOST_CHECK(kdata.size() == 682823L);
1019  record = kdata[0];
1020  BOOST_CHECK(record.datetime == Datetime(200001040931));
1021 
1022  record = kdata[kdata.size()-1];
1023  BOOST_CHECK(record.datetime == Datetime(201112061500));
1024 
1026  stock = sm.getStock("sh000001");
1027  query = KQueryByDate(Datetime(200303051451), Datetime(200303051455), KQuery::MIN);
1028  kdata = stock.getKData(query);
1029  BOOST_CHECK(kdata.size() == 4);
1030  record = kdata[0];
1031  BOOST_CHECK(record.datetime == Datetime(200303051451));
1032 
1033  record = kdata[kdata.size()-1];
1034  BOOST_CHECK(record.datetime == Datetime(200303051454));
1035 
1037  stock = sm.getStock("sh000001");
1038  query = KQueryByDate(Datetime(200001040931), Datetime(200001040931), KQuery::MIN);
1039  kdata = stock.getKData(query);
1040  BOOST_CHECK(kdata.size() == 0);
1041  query = KQueryByDate(Datetime(200601041446), Datetime(200601041446), KQuery::MIN);
1042  kdata = stock.getKData(query);
1043  BOOST_CHECK(kdata.size() == 0);
1044  query = KQueryByDate(Datetime(200801300955), Datetime(200601041446), KQuery::MIN);
1045  kdata = stock.getKData(query);
1046  BOOST_CHECK(kdata.size() == 0);
1047  query = KQueryByDate(Datetime(201112061500), Datetime(201112061500), KQuery::MIN);
1048  kdata = stock.getKData(query);
1049  BOOST_CHECK(kdata.size() == 0);
1050 
1052  stock = sm.getStock("sh000001");
1053  query = KQueryByDate(Datetime(200001040931), Datetime(200001040932), KQuery::MIN);
1054  kdata = stock.getKData(query);
1055  BOOST_CHECK(kdata.size() == 1);
1056  record = kdata[0];
1057  BOOST_CHECK(record.datetime == Datetime(200001040931));
1058 
1059  query = KQueryByDate(Datetime(200601041446), Datetime(200601041447), KQuery::MIN);
1060  kdata = stock.getKData(query);
1061  BOOST_CHECK(kdata.size() == 1);
1062  record = kdata[0];
1063  BOOST_CHECK(record.datetime == Datetime(200601041446));
1064 
1065  query = KQueryByDate(Datetime(201112061500), Datetime(201112061501), KQuery::MIN);
1066  kdata = stock.getKData(query);
1067  BOOST_CHECK(kdata.size() == 1);
1068  record = kdata[0];
1069  BOOST_CHECK(record.datetime == Datetime(201112061500));
1070 }
1071 
1072 
1074 BOOST_AUTO_TEST_CASE( test_getKData_recover ) {
1075  StockManager& sm = StockManager::instance();
1076  Stock stock = sm.getStock("sh600000");
1077  KQuery query;
1078  KData kdata;
1079 
1081  query = KQuery(0, Null<hku_int64>(), KQuery::DAY, KQuery::FORWARD);
1082  kdata = stock.getKData(query);
1083  BOOST_CHECK(kdata[2710] == KRecord(Datetime(201106030000), 10.02, 10.14, 10.0, 10.09, 38726.1, 384820));
1084  BOOST_CHECK(kdata[2709] == KRecord(Datetime(201106020000), 10.34, 10.38, 9.93, 10.04, 103909.3, 780543.0));
1085  BOOST_CHECK(kdata[2554] == KRecord(Datetime(201010140000), 11.04, 11.42, 10.91, 10.95, 322428.8, 2195006));
1086  BOOST_CHECK(kdata[2548] == KRecord(Datetime(201009290000), 9.26, 9.64, 9.20, 9.48, 99719.8, 799165));
1087  BOOST_CHECK(kdata[2547] == KRecord(Datetime(201009280000), 8.80, 8.80, 8.55, 8.56, 81241.5, 639882));
1088 
1090  query = KQuery(0, Null<hku_int64>(), KQuery::DAY, KQuery::BACKWARD);
1091  kdata = stock.getKData(query);
1092  BOOST_CHECK(kdata[0] == KRecord(Datetime(199911100000), 29.5, 29.8, 27.0, 27.75, 485910.2, 1740850));
1093  BOOST_CHECK(kdata[151] == KRecord(Datetime(200007050000), 23.25, 23.47, 23.15, 23.22, 3298.8, 14218));
1094  BOOST_CHECK(kdata[152] == KRecord(Datetime(200007060000), 29.09, 29.24, 28.91, 29.0, 3049.5, 13200));
1095  BOOST_CHECK(kdata[657] == KRecord(Datetime(200208210000), 22.9, 23.4, 22.69, 23.15, 36409.8, 197640));
1096  BOOST_CHECK(kdata[658] == KRecord(Datetime(200208220000), 23.43, 23.57, 23.24, 23.49, 13101.3, 106872));
1097 
1099  query = KQuery(0, Null<hku_int64>(), KQuery::DAY, KQuery::EQUAL_FORWARD);
1100  kdata = stock.getKData(query);
1101  BOOST_CHECK(kdata[2710] == KRecord(Datetime(201106030000), 10.02, 10.14, 10.0, 10.09, 38726.1, 384820));
1102  BOOST_CHECK(kdata[2709] == KRecord(Datetime(201106020000), 10.33, 10.37, 9.93, 10.04, 103909.3, 780543.0));
1103  BOOST_CHECK(kdata[2554] == KRecord(Datetime(201010140000), 11.03, 11.40, 10.90, 10.94, 322428.8, 2195006));
1104  BOOST_CHECK(kdata[2548] == KRecord(Datetime(201009290000), 9.27, 9.64, 9.21, 9.49, 99719.8, 799165));
1105  BOOST_CHECK(kdata[2547] == KRecord(Datetime(201009280000), 8.81, 8.81, 8.57, 8.58, 81241.5, 639882));
1106 
1108  query = KQuery(0, Null<hku_int64>(), KQuery::DAY, KQuery::EQUAL_BACKWARD);
1109  kdata = stock.getKData(query);
1110  BOOST_CHECK(kdata[0] == KRecord(Datetime(199911100000), 29.5, 29.8, 27.0, 27.75, 485910.2, 1740850));
1111  BOOST_CHECK(kdata[151] == KRecord(Datetime(200007050000), 23.25, 23.47, 23.15, 23.22, 3298.8, 14218));
1112  BOOST_CHECK(kdata[152] == KRecord(Datetime(200007060000), 29.13, 29.28, 28.95, 29.04, 3049.5, 13200));
1113  BOOST_CHECK(kdata[657] == KRecord(Datetime(200208210000), 22.9, 23.4, 22.68, 23.15, 36409.8, 197640));
1114  BOOST_CHECK(kdata[658] == KRecord(Datetime(200208220000), 23.43, 23.58, 23.24, 23.49, 13101.3, 106872));
1115 }
1116