test_doc  0.1
 全部  文件 函数 变量 宏定义 
test_Stock.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_Stock_Relational_comparison ) {
31  StockManager& sm = StockManager::instance();
32  Stock s1;
33 
35  BOOST_CHECK(s1 == Null<Stock>());
36 
38  s1 = sm.getStock("sh000001");
39  BOOST_CHECK(s1 != Null<Stock>());
40 
42  Stock s2 = sm.getStock("sh000001");
43  BOOST_CHECK(s1 == s2);
44 
46  s2 = sm.getStock("sz000001");
47  BOOST_CHECK(s1 != s2);
48 }
49 
51 BOOST_AUTO_TEST_CASE( test_Stock_getWeight ) {
52  StockManager& sm = StockManager::instance();
53 
54  Stock stock = sm.getStock("sz000001");
55  StockWeight weight;
56 
58  StockWeightList weightList = stock.getWeight();
59  BOOST_CHECK(weightList.size() == 23);
60  weight = weightList.front();
61  BOOST_CHECK(weight.datetime() == Datetime(199104030000L));
62  BOOST_CHECK(weight.countAsGift() == 0.0);
63  BOOST_CHECK(weight.countForSell() == 0.0);
64  BOOST_CHECK(weight.priceForSell() == 0.0);
65  BOOST_CHECK(weight.bonus() == 0.0);
66  BOOST_CHECK(weight.increasement() == 0.0);
67  BOOST_CHECK(weight.totalCount() == 150);
68  BOOST_CHECK(weight.freeCount() == 68);
69 
70  weight = weightList.back();
71  BOOST_CHECK(weight.datetime() == Datetime(201108050000L));
72  BOOST_CHECK(weight.countAsGift() == 0.0);
73  BOOST_CHECK(weight.countForSell() == 0.0);
74  BOOST_CHECK(weight.priceForSell() == 0.0);
75  BOOST_CHECK(weight.bonus() == 0.0);
76  BOOST_CHECK(weight.increasement() == 0.0);
77  BOOST_CHECK(weight.totalCount() == 512335);
78  BOOST_CHECK(weight.freeCount() == 310536);
79 
81  weightList = stock.getWeight(Datetime(199501010000),
82  Datetime(199701010000));
83  BOOST_CHECK(weightList.size() == 2);
84  weight = weightList.front();
85  BOOST_CHECK(weight.datetime() == Datetime(199509250000));
86  BOOST_CHECK(weight.countAsGift() == 2.0);
87  BOOST_CHECK(weight.countForSell() == 0.0);
88  BOOST_CHECK(weight.priceForSell() == 0.0);
89  BOOST_CHECK(weight.bonus() == 3.0);
90  BOOST_CHECK(weight.increasement() == 0.0);
91  BOOST_CHECK(weight.totalCount() == 51728);
92  BOOST_CHECK(weight.freeCount() == 35721);
93 
94  weight = weightList.back();
95  BOOST_CHECK(weight.datetime() == Datetime(199605270000));
96  BOOST_CHECK(weight.countAsGift() == 5.0);
97  BOOST_CHECK(weight.countForSell() == 0.0);
98  BOOST_CHECK(weight.priceForSell() == 0.0);
99  BOOST_CHECK(weight.bonus() == 0.0);
100  BOOST_CHECK(weight.increasement() == 5.0);
101  BOOST_CHECK(weight.totalCount() == 103456);
102  BOOST_CHECK(weight.freeCount() == 71393);
103 
105  weightList = stock.getWeight(Datetime(199509250000),
106  Datetime(199701010000));
107  BOOST_CHECK(weightList.size() == 2);
108  weight = weightList.front();
109  BOOST_CHECK(weight.datetime() == Datetime(199509250000));
110  BOOST_CHECK(weight.countAsGift() == 2.0);
111  BOOST_CHECK(weight.countForSell() == 0.0);
112  BOOST_CHECK(weight.priceForSell() == 0.0);
113  BOOST_CHECK(weight.bonus() == 3.0);
114  BOOST_CHECK(weight.increasement() == 0.0);
115  BOOST_CHECK(weight.totalCount() == 51728);
116  BOOST_CHECK(weight.freeCount() == 35721);
117 
118  weight = weightList.back();
119  BOOST_CHECK(weight.datetime() == Datetime(199605270000));
120  BOOST_CHECK(weight.countAsGift() == 5.0);
121  BOOST_CHECK(weight.countForSell() == 0.0);
122  BOOST_CHECK(weight.priceForSell() == 0.0);
123  BOOST_CHECK(weight.bonus() == 0.0);
124  BOOST_CHECK(weight.increasement() == 5.0);
125  BOOST_CHECK(weight.totalCount() == 103456);
126  BOOST_CHECK(weight.freeCount() == 71393);
127 
129  weightList = stock.getWeight(Datetime(199501010000),
130  Datetime(199605270000));
131  BOOST_CHECK(weightList.size() == 1);
132  weight = weightList.front();
133  BOOST_CHECK(weight.datetime() == Datetime(199509250000));
134  BOOST_CHECK(weight.countAsGift() == 2.0);
135  BOOST_CHECK(weight.countForSell() == 0.0);
136  BOOST_CHECK(weight.priceForSell() == 0.0);
137  BOOST_CHECK(weight.bonus() == 3.0);
138  BOOST_CHECK(weight.increasement() == 0.0);
139  BOOST_CHECK(weight.totalCount() == 51728);
140  BOOST_CHECK(weight.freeCount() == 35721);
141 
143  weightList = stock.getWeight(Datetime(201101010000), Null<Datetime>());
144  BOOST_CHECK(weightList.size() == 1);
145  weight = weightList.front();
146  BOOST_CHECK(weight.datetime() == Datetime(201108050000));
147  BOOST_CHECK(weight.countAsGift() == 0.0);
148  BOOST_CHECK(weight.countForSell() == 0.0);
149  BOOST_CHECK(weight.priceForSell() == 0.0);
150  BOOST_CHECK(weight.bonus() == 0.0);
151  BOOST_CHECK(weight.increasement() == 0.0);
152  BOOST_CHECK(weight.totalCount() == 512335);
153  BOOST_CHECK(weight.freeCount() == 310536);
154 
156  weightList = stock.getWeight(Datetime(201101010000));
157  BOOST_CHECK(weightList.size() == 1);
158  weight = weightList.front();
159  BOOST_CHECK(weight.datetime() == Datetime(201108050000));
160  BOOST_CHECK(weight.countAsGift() == 0.0);
161  BOOST_CHECK(weight.countForSell() == 0.0);
162  BOOST_CHECK(weight.priceForSell() == 0.0);
163  BOOST_CHECK(weight.bonus() == 0.0);
164  BOOST_CHECK(weight.increasement() == 0.0);
165  BOOST_CHECK(weight.totalCount() == 512335);
166  BOOST_CHECK(weight.freeCount() == 310536);
167 }
168 
169 
171 BOOST_AUTO_TEST_CASE( test_Stock_getCount ) {
172  StockManager& sm = StockManager::instance();
173 
175  Stock stock = sm.getStock("sh000001");
176  BOOST_CHECK(stock.getCount(KQuery::DAY) == 5121);
177 
179  stock = sm.getStock("Sz000001");
180  BOOST_CHECK(stock.getCount(KQuery::DAY) == 4937);
181 
183  stock = sm.getStock("sh000001");
184  BOOST_CHECK(stock.getCount(KQuery::WEEK) == 1059);
185 
187  stock = sm.getStock("Sz000001");
188  BOOST_CHECK(stock.getCount(KQuery::WEEK) == 1037);
189 
191  stock = sm.getStock("sh000001");
192  BOOST_CHECK(stock.getCount(KQuery::MONTH) == 253);
193 
195  stock = sm.getStock("Sz000001");
196  BOOST_CHECK(stock.getCount(KQuery::MONTH) == 250);
197 
199  stock = sm.getStock("sh000001");
200  BOOST_CHECK(stock.getCount(KQuery::QUARTER) == 85);
201 
203  stock = sm.getStock("Sz000001");
204  BOOST_CHECK(stock.getCount(KQuery::QUARTER) == 84);
205 
207  stock = sm.getStock("sh000001");
208  BOOST_CHECK(stock.getCount(KQuery::HALFYEAR) == 43);
209 
211  stock = sm.getStock("Sz000001");
212  BOOST_CHECK(stock.getCount(KQuery::HALFYEAR) == 42);
213 
215  stock = sm.getStock("sh000001");
216  BOOST_CHECK(stock.getCount(KQuery::YEAR) == 22);
217 
219  stock = sm.getStock("Sz000001");
220  BOOST_CHECK(stock.getCount(KQuery::YEAR) == 21);
221 
223  stock = sm.getStock("sh000001");
224  BOOST_CHECK(stock.getCount(KQuery::MIN) == 682823L);
225 
227  stock = sm.getStock("Sz000001");
228  BOOST_CHECK(stock.getCount(KQuery::MIN) == 641091L);
229 
231  stock = sm.getStock("sh000001");
232  BOOST_CHECK(stock.getCount(KQuery::MIN5) == 133980L);
233 
235  stock = sm.getStock("Sz000001");
236  BOOST_CHECK(stock.getCount(KQuery::MIN5) == 126381L);
237 
239  stock = sm.getStock("sh000001");
240  BOOST_CHECK(stock.getCount(KQuery::MIN15) == 44750L);
241 
243  stock = sm.getStock("Sz000001");
244  BOOST_CHECK(stock.getCount(KQuery::MIN15) == 42195L);
245 
247  stock = sm.getStock("sh000001");
248  BOOST_CHECK(stock.getCount(KQuery::MIN30) == 22380L);
249 
251  stock = sm.getStock("Sz000001");
252  BOOST_CHECK(stock.getCount(KQuery::MIN30) == 21101L);
253 
255  stock = sm.getStock("sh000001");
256  BOOST_CHECK(stock.getCount(KQuery::MIN60) == 11193L);
257 
259  stock = sm.getStock("Sz000001");
260  BOOST_CHECK(stock.getCount(KQuery::MIN60) == 10553L);
261 }
262 
263 
265 BOOST_AUTO_TEST_CASE( test_Stock_getKRecord ) {
266  StockManager& sm = StockManager::instance();
267  Stock stock = sm.getStock("sh000001");
268  KRecord record, expect;
269 
271  record = stock.getKRecord(0);
272  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
273  BOOST_CHECK(record == expect);
274 
276  record = stock.getKRecord(10);
277  expect = KRecord(Datetime(199101030000), 128.840, 130.14, 128.84, 130.140, 9.3, 141);
278  BOOST_CHECK(record == expect);
279 
281  size_t total = stock.getCount();
282  record = stock.getKRecord(total - 1);
283  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
284  BOOST_CHECK(record == expect);
285 
287  record = stock.getKRecord(0, KQuery::WEEK);
288  expect = KRecord(Datetime(199012170000), 96.05, 109.130, 95.790, 109.130, 59.4, 1485);
289  BOOST_CHECK(record == expect);
290 
292  record = stock.getKRecord(10, KQuery::WEEK);
293  expect = KRecord(Datetime(199102250000), 134.37, 134.87, 132.47, 132.53, 827.1, 11500);
294  BOOST_CHECK(record == expect);
295 
297  total = stock.getCount(KQuery::WEEK);
298  record = stock.getKRecord(total - 1, KQuery::WEEK);
299  expect = KRecord(Datetime(201112050000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048);
300  BOOST_CHECK(record == expect);
301 
303  record = stock.getKRecord(0, KQuery::MONTH);
304  expect = KRecord(Datetime(199012010000), 96.05, 127.610, 95.790, 127.610, 93.6, 1884);
305  BOOST_CHECK(record == expect);
306 
308  record = stock.getKRecord(10, KQuery::MONTH);
309  expect = KRecord(Datetime(199110010000), 181.550, 218.600, 179.800, 218.600, 14953.6, 223443);
310  BOOST_CHECK(record == expect);
311 
313  total = stock.getCount(KQuery::MONTH);
314  record = stock.getKRecord(total - 1, KQuery::MONTH);
315  expect = KRecord(Datetime(201112010000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941);
316  BOOST_CHECK(record == expect);
317 
319  record = stock.getKRecord(0, KQuery::QUARTER);
320  expect = KRecord(Datetime(199010010000), 96.05, 127.610, 95.790, 127.610, 93.6, 1884);
321  BOOST_CHECK(record == expect);
322 
324  record = stock.getKRecord(10, KQuery::QUARTER);
325  expect = KRecord(Datetime(199304010000), 921.590, 1392.620, 859.48, 1007.050, 5181883.5, 27631999);
326  BOOST_CHECK(record == expect);
327 
329  total = stock.getCount(KQuery::QUARTER);
330  record = stock.getKRecord(total - 1, KQuery::QUARTER);
331  expect = KRecord(Datetime(201110010000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936);
332  BOOST_CHECK(record == expect);
333 
335  record = stock.getKRecord(0, KQuery::HALFYEAR);
336  expect = KRecord(Datetime(199007010000), 96.05, 127.610, 95.790, 127.610, 93.6, 1884);
337  BOOST_CHECK(record == expect);
338 
340  record = stock.getKRecord(10, KQuery::HALFYEAR);
341  expect = KRecord(Datetime(199507010000), 623.140, 792.540, 552.840, 555.290, 18764625.6, 351276329);
342  BOOST_CHECK(record == expect);
343 
345  total = stock.getCount(KQuery::HALFYEAR);
346  record = stock.getKRecord(total - 1, KQuery::HALFYEAR);
347  expect = KRecord(Datetime(201107010000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694);
348  BOOST_CHECK(record == expect);
349 
351  record = stock.getKRecord(0, KQuery::YEAR);
352  expect = KRecord(Datetime(199001010000), 96.05, 127.61, 95.79, 127.61, 93.6, 1884);
353  BOOST_CHECK(record == expect);
354 
356  record = stock.getKRecord(10, KQuery::YEAR);
357  expect = KRecord(Datetime(200001010000), 1368.693, 2125.724, 1361.214, 2073.476, 326945832.5, 3433225623);
358  BOOST_CHECK(record == expect);
359 
361  total = stock.getCount(KQuery::YEAR);
362  record = stock.getKRecord(total - 1, KQuery::YEAR);
363  expect = KRecord(Datetime(201101010000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512);
364  BOOST_CHECK(record == expect);
365 
367  record = stock.getKRecord(0, KQuery::MIN);
368  expect = KRecord(Datetime("2000-1-4 9:31"), 1366.580, 1368.692, 1366.579, 1368.692, 4124880, 191158);
369  BOOST_CHECK(record == expect);
370 
372  record = stock.getKRecord(10, KQuery::MIN);
373  expect = KRecord(Datetime(200001040941), 1367.389, 1367.389, 1366.578, 1366.578, 1214910.4, 31811);
374  BOOST_CHECK(record == expect);
375 
377  total = stock.getCount(KQuery::MIN);
378  record = stock.getKRecord(total - 1, KQuery::MIN);
379  expect = KRecord(Datetime("2011-12-06 15:00"), 2325.380, 2326.1, 2324.6, 2325.9, 5215150, 566312);
380  BOOST_CHECK(record == expect);
381 
383  record = stock.getKRecord(0, KQuery::MIN5);
384  expect = KRecord(Datetime(200001040935), 1366.580, 1369.680, 1366.579, 1369.187, 106611.5, 438171);
385  BOOST_CHECK(record == expect);
386 
388  record = stock.getKRecord(10, KQuery::MIN5);
389  expect = KRecord(Datetime(200001041025), 1366.291, 1366.582, 1366.144, 1366.526, 89332, 118007);
390  BOOST_CHECK(record == expect);
391 
393  total = stock.getCount(KQuery::MIN5);
394  record = stock.getKRecord(total - 1, KQuery::MIN5);
395  expect = KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675);
396  BOOST_CHECK(record == expect);
397 
399  record = stock.getKRecord(0, KQuery::MIN15);
400  expect = KRecord(Datetime(200001040945), 1366.580, 1369.680, 1364.645, 1364.763, 250875.9, 912990);
401  BOOST_CHECK(record == expect);
402 
404  record = stock.getKRecord(10, KQuery::MIN15);
405  expect = KRecord(Datetime(200001041345), 1399.325, 1403.996, 1399.325, 1403.056, 441489.9, 547552);
406  BOOST_CHECK(record == expect);
407 
409  total = stock.getCount(KQuery::MIN15);
410  record = stock.getKRecord(total - 1, KQuery::MIN15);
411  expect = KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591);
412  BOOST_CHECK(record == expect);
413 
415  record = stock.getKRecord(0, KQuery::MIN30);
416  expect = KRecord(Datetime(200001041000), 1366.580, 1369.68, 1361.459, 1361.459, 455153, 1370442);
417  BOOST_CHECK(record == expect);
418 
420  record = stock.getKRecord(10, KQuery::MIN30);
421  expect = KRecord(Datetime(200001051100), 1421.179, 1425.868, 1421.179, 1423.859, 1109219.5, 1282851);
422  BOOST_CHECK(record == expect);
423 
425  total = stock.getCount(KQuery::MIN30);
426  record = stock.getKRecord(total - 1, KQuery::MIN30);
427  expect = KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054);
428  BOOST_CHECK(record == expect);
429 
431  record = stock.getKRecord(0, KQuery::MIN60);
432  expect = KRecord(Datetime(200001041030), 1366.580, 1369.68, 1361.295, 1367.683, 1041787.5, 2370736);
433  BOOST_CHECK(record == expect);
434 
436  record = stock.getKRecord(10, KQuery::MIN60);
437  expect = KRecord(Datetime(200001061400), 1411.490, 1436.53, 1411.49, 1436.53, 2432679.2, 3016536);
438  BOOST_CHECK(record == expect);
439 
441  total = stock.getCount(KQuery::MIN60);
442  record = stock.getKRecord(total - 1, KQuery::MIN60);
443  expect = KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356);
444  BOOST_CHECK(record == expect);
445 }
446 
447 
449 BOOST_AUTO_TEST_CASE( test_Stock_getIndexRange ) {
450  StockManager& sm = StockManager::instance();
451  Stock stock;
452  KQuery query;
453  bool success;
454  size_t out_start, out_end;
455  stock = sm.getStock("sh000001");
456 
458  query = KQuery();
459  success = stock.getIndexRange(query, out_start, out_end);
460  BOOST_CHECK(success == true);
461  BOOST_CHECK(out_start == 0);
462  BOOST_CHECK(out_end == 5121);
463 
464  query = KQuery(0, Null<hku_int64>(), KQuery::WEEK);
465  success = stock.getIndexRange(query, out_start, out_end);
466  BOOST_CHECK(success == true);
467  BOOST_CHECK(out_start == 0);
468  BOOST_CHECK(out_end == 1059);
469 
470  query = KQuery(0, Null<hku_int64>(), KQuery::MONTH);
471  success = stock.getIndexRange(query, out_start, out_end);
472  BOOST_CHECK(success == true);
473  BOOST_CHECK(out_start == 0);
474  BOOST_CHECK(out_end == 253);
475 
476  query = KQuery(0, Null<hku_int64>(), KQuery::QUARTER);
477  success = stock.getIndexRange(query, out_start, out_end);
478  BOOST_CHECK(success == true);
479  BOOST_CHECK(out_start == 0);
480  BOOST_CHECK(out_end == 85);
481 
482  query = KQuery(0, Null<hku_int64>(), KQuery::HALFYEAR);
483  success = stock.getIndexRange(query, out_start, out_end);
484  BOOST_CHECK(success == true);
485  BOOST_CHECK(out_start == 0);
486  BOOST_CHECK(out_end == 43);
487 
488  query = KQuery(0, Null<hku_int64>(), KQuery::YEAR);
489  success = stock.getIndexRange(query, out_start, out_end);
490  BOOST_CHECK(success == true);
491  BOOST_CHECK(out_start == 0);
492  BOOST_CHECK(out_end == 22);
493 
494  query = KQuery(0, Null<hku_int64>(), KQuery::MIN);
495  success = stock.getIndexRange(query, out_start, out_end);
496  BOOST_CHECK(success == true);
497  BOOST_CHECK(out_start == 0);
498  BOOST_CHECK(out_end == 682823L);
499 
500  query = KQuery(0, Null<hku_int64>(), KQuery::MIN5);
501  success = stock.getIndexRange(query, out_start, out_end);
502  BOOST_CHECK(success == true);
503  BOOST_CHECK(out_start == 0);
504  BOOST_CHECK(out_end == 133980L);
505 
506  query = KQuery(0, Null<hku_int64>(), KQuery::MIN15);
507  success = stock.getIndexRange(query, out_start, out_end);
508  BOOST_CHECK(success == true);
509  BOOST_CHECK(out_start == 0);
510  BOOST_CHECK(out_end == 44750);
511 
512  query = KQuery(0, Null<hku_int64>(), KQuery::MIN30);
513  success = stock.getIndexRange(query, out_start, out_end);
514  BOOST_CHECK(success == true);
515  BOOST_CHECK(out_start == 0);
516  BOOST_CHECK(out_end == 22380L);
517 
518  query = KQuery(0, Null<hku_int64>(), KQuery::MIN60);
519  success = stock.getIndexRange(query, out_start, out_end);
520  BOOST_CHECK(success == true);
521  BOOST_CHECK(out_start == 0);
522  BOOST_CHECK(out_end == 11193);
523 
525  query = KQueryByDate();
526  success = stock.getIndexRange(query, out_start, out_end);
527  BOOST_CHECK(success == true);
528  BOOST_CHECK(out_start == 0);
529  BOOST_CHECK(out_end == 5121);
530 
531  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::WEEK);
532  success = stock.getIndexRange(query, out_start, out_end);
533  BOOST_CHECK(success == true);
534  BOOST_CHECK(out_start == 0);
535  BOOST_CHECK(out_end == 1059);
536 
537  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::MONTH);
538  success = stock.getIndexRange(query, out_start, out_end);
539  BOOST_CHECK(success == true);
540  BOOST_CHECK(out_start == 0);
541  BOOST_CHECK(out_end == 253);
542 
543  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::QUARTER);
544  success = stock.getIndexRange(query, out_start, out_end);
545  BOOST_CHECK(success == true);
546  BOOST_CHECK(out_start == 0);
547  BOOST_CHECK(out_end == 85);
548 
549  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::HALFYEAR);
550  success = stock.getIndexRange(query, out_start, out_end);
551  BOOST_CHECK(success == true);
552  BOOST_CHECK(out_start == 0);
553  BOOST_CHECK(out_end == 43);
554 
555  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::YEAR);
556  success = stock.getIndexRange(query, out_start, out_end);
557  BOOST_CHECK(success == true);
558  BOOST_CHECK(out_start == 0);
559  BOOST_CHECK(out_end == 22);
560 
561  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::MIN);
562  success = stock.getIndexRange(query, out_start, out_end);
563  BOOST_CHECK(success == true);
564  BOOST_CHECK(out_start == 0);
565  BOOST_CHECK(out_end == 682823L);
566 
567  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::MIN5);
568  success = stock.getIndexRange(query, out_start, out_end);
569  BOOST_CHECK(success == true);
570  BOOST_CHECK(out_start == 0);
571  BOOST_CHECK(out_end == 133980L);
572 
573  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::MIN15);
574  success = stock.getIndexRange(query, out_start, out_end);
575  BOOST_CHECK(success == true);
576  BOOST_CHECK(out_start == 0);
577  BOOST_CHECK(out_end == 44750);
578 
579  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::MIN30);
580  success = stock.getIndexRange(query, out_start, out_end);
581  BOOST_CHECK(success == true);
582  BOOST_CHECK(out_start == 0);
583  BOOST_CHECK(out_end == 22380L);
584 
585  query = KQueryByDate(Datetime::minDatetime(), Null<Datetime>(), KQuery::MIN60);
586  success = stock.getIndexRange(query, out_start, out_end);
587  BOOST_CHECK(success == true);
588  BOOST_CHECK(out_start == 0);
589  BOOST_CHECK(out_end == 11193);
590 
592  query = KQuery(168,165);
593  success = stock.getIndexRange(query, out_start, out_end);
594  BOOST_CHECK(success == false);
595  BOOST_CHECK(out_start == 0);
596  BOOST_CHECK(out_end == 0);
597 
598  query = KQuery(168,165, KQuery::WEEK);
599  success = stock.getIndexRange(query, out_start, out_end);
600  BOOST_CHECK(success == false);
601  BOOST_CHECK(out_start == 0);
602  BOOST_CHECK(out_end == 0);
603 
604  query = KQuery(168,165, KQuery::MONTH);
605  success = stock.getIndexRange(query, out_start, out_end);
606  BOOST_CHECK(success == false);
607  BOOST_CHECK(out_start == 0);
608  BOOST_CHECK(out_end == 0);
609 
610  query = KQuery(168,165, KQuery::QUARTER);
611  success = stock.getIndexRange(query, out_start, out_end);
612  BOOST_CHECK(success == false);
613  BOOST_CHECK(out_start == 0);
614  BOOST_CHECK(out_end == 0);
615 
616  query = KQuery(168,165, KQuery::HALFYEAR);
617  success = stock.getIndexRange(query, out_start, out_end);
618  BOOST_CHECK(success == false);
619  BOOST_CHECK(out_start == 0);
620  BOOST_CHECK(out_end == 0);
621 
622  query = KQuery(168,165, KQuery::YEAR);
623  success = stock.getIndexRange(query, out_start, out_end);
624  BOOST_CHECK(success == false);
625  BOOST_CHECK(out_start == 0);
626  BOOST_CHECK(out_end == 0);
627 
628  query = KQuery(168,165, KQuery::MIN);
629  success = stock.getIndexRange(query, out_start, out_end);
630  BOOST_CHECK(success == false);
631  BOOST_CHECK(out_start == 0);
632  BOOST_CHECK(out_end == 0);
633 
634  query = KQuery(168,165, KQuery::MIN5);
635  success = stock.getIndexRange(query, out_start, out_end);
636  BOOST_CHECK(success == false);
637  BOOST_CHECK(out_start == 0);
638  BOOST_CHECK(out_end == 0);
639 
640  query = KQuery(168,165, KQuery::MIN15);
641  success = stock.getIndexRange(query, out_start, out_end);
642  BOOST_CHECK(success == false);
643  BOOST_CHECK(out_start == 0);
644  BOOST_CHECK(out_end == 0);
645 
646  query = KQuery(168,165, KQuery::MIN30);
647  success = stock.getIndexRange(query, out_start, out_end);
648  BOOST_CHECK(success == false);
649  BOOST_CHECK(out_start == 0);
650  BOOST_CHECK(out_end == 0);
651 
652  query = KQuery(168,165, KQuery::MIN60);
653  success = stock.getIndexRange(query, out_start, out_end);
654  BOOST_CHECK(success == false);
655  BOOST_CHECK(out_start == 0);
656  BOOST_CHECK(out_end == 0);
657 
659  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000));
660  success = stock.getIndexRange(query, out_start, out_end);
661  BOOST_CHECK(success == false);
662  BOOST_CHECK(out_start == 0);
663  BOOST_CHECK(out_end == 0);
664 
665  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::WEEK);
666  success = stock.getIndexRange(query, out_start, out_end);
667  BOOST_CHECK(success == false);
668  BOOST_CHECK(out_start == 0);
669  BOOST_CHECK(out_end == 0);
670 
671  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MONTH);
672  success = stock.getIndexRange(query, out_start, out_end);
673  BOOST_CHECK(success == false);
674  BOOST_CHECK(out_start == 0);
675  BOOST_CHECK(out_end == 0);
676 
677  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::QUARTER);
678  success = stock.getIndexRange(query, out_start, out_end);
679  BOOST_CHECK(success == false);
680  BOOST_CHECK(out_start == 0);
681  BOOST_CHECK(out_end == 0);
682 
683  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::HALFYEAR);
684  success = stock.getIndexRange(query, out_start, out_end);
685  BOOST_CHECK(success == false);
686  BOOST_CHECK(out_start == 0);
687  BOOST_CHECK(out_end == 0);
688 
689  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::YEAR);
690  success = stock.getIndexRange(query, out_start, out_end);
691  BOOST_CHECK(success == false);
692  BOOST_CHECK(out_start == 0);
693  BOOST_CHECK(out_end == 0);
694 
695  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN);
696  success = stock.getIndexRange(query, out_start, out_end);
697  BOOST_CHECK(success == false);
698  BOOST_CHECK(out_start == 0);
699  BOOST_CHECK(out_end == 0);
700 
701  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN5);
702  success = stock.getIndexRange(query, out_start, out_end);
703  BOOST_CHECK(success == false);
704  BOOST_CHECK(out_start == 0);
705  BOOST_CHECK(out_end == 0);
706 
707  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN15);
708  success = stock.getIndexRange(query, out_start, out_end);
709  BOOST_CHECK(success == false);
710  BOOST_CHECK(out_start == 0);
711  BOOST_CHECK(out_end == 0);
712 
713  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN30);
714  success = stock.getIndexRange(query, out_start, out_end);
715  BOOST_CHECK(success == false);
716  BOOST_CHECK(out_start == 0);
717  BOOST_CHECK(out_end == 0);
718 
719  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN60);
720  success = stock.getIndexRange(query, out_start, out_end);
721  BOOST_CHECK(success == false);
722  BOOST_CHECK(out_start == 0);
723  BOOST_CHECK(out_end == 0);
724 
726  query = KQuery(165,165);
727  success = stock.getIndexRange(query, out_start, out_end);
728  BOOST_CHECK(success == false);
729  BOOST_CHECK(out_start == 0);
730  BOOST_CHECK(out_end == 0);
731 
732  query = KQuery(165,165, KQuery::WEEK);
733  success = stock.getIndexRange(query, out_start, out_end);
734  BOOST_CHECK(success == false);
735  BOOST_CHECK(out_start == 0);
736  BOOST_CHECK(out_end == 0);
737 
738  query = KQuery(165,165, KQuery::MONTH);
739  success = stock.getIndexRange(query, out_start, out_end);
740  BOOST_CHECK(success == false);
741  BOOST_CHECK(out_start == 0);
742  BOOST_CHECK(out_end == 0);
743 
744  query = KQuery(165,165, KQuery::QUARTER);
745  success = stock.getIndexRange(query, out_start, out_end);
746  BOOST_CHECK(success == false);
747  BOOST_CHECK(out_start == 0);
748  BOOST_CHECK(out_end == 0);
749 
750  query = KQuery(165,165, KQuery::HALFYEAR);
751  success = stock.getIndexRange(query, out_start, out_end);
752  BOOST_CHECK(success == false);
753  BOOST_CHECK(out_start == 0);
754  BOOST_CHECK(out_end == 0);
755 
756  query = KQuery(165,165, KQuery::YEAR);
757  success = stock.getIndexRange(query, out_start, out_end);
758  BOOST_CHECK(success == false);
759  BOOST_CHECK(out_start == 0);
760  BOOST_CHECK(out_end == 0);
761 
762  query = KQuery(165,165, KQuery::MIN);
763  success = stock.getIndexRange(query, out_start, out_end);
764  BOOST_CHECK(success == false);
765  BOOST_CHECK(out_start == 0);
766  BOOST_CHECK(out_end == 0);
767 
768  query = KQuery(165,165, KQuery::MIN5);
769  success = stock.getIndexRange(query, out_start, out_end);
770  BOOST_CHECK(success == false);
771  BOOST_CHECK(out_start == 0);
772  BOOST_CHECK(out_end == 0);
773 
774  query = KQuery(165,165, KQuery::MIN15);
775  success = stock.getIndexRange(query, out_start, out_end);
776  BOOST_CHECK(success == false);
777  BOOST_CHECK(out_start == 0);
778  BOOST_CHECK(out_end == 0);
779 
780  query = KQuery(165,165, KQuery::MIN30);
781  success = stock.getIndexRange(query, out_start, out_end);
782  BOOST_CHECK(success == false);
783  BOOST_CHECK(out_start == 0);
784  BOOST_CHECK(out_end == 0);
785 
786  query = KQuery(165,165, KQuery::MIN60);
787  success = stock.getIndexRange(query, out_start, out_end);
788  BOOST_CHECK(success == false);
789  BOOST_CHECK(out_start == 0);
790  BOOST_CHECK(out_end == 0);
791 
793  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000));
794  success = stock.getIndexRange(query, out_start, out_end);
795  BOOST_CHECK(success == false);
796  BOOST_CHECK(out_start == 0);
797  BOOST_CHECK(out_end == 0);
798 
799  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::WEEK);
800  success = stock.getIndexRange(query, out_start, out_end);
801  BOOST_CHECK(success == false);
802  BOOST_CHECK(out_start == 0);
803  BOOST_CHECK(out_end == 0);
804 
805  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MONTH);
806  success = stock.getIndexRange(query, out_start, out_end);
807  BOOST_CHECK(success == false);
808  BOOST_CHECK(out_start == 0);
809  BOOST_CHECK(out_end == 0);
810 
811  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::QUARTER);
812  success = stock.getIndexRange(query, out_start, out_end);
813  BOOST_CHECK(success == false);
814  BOOST_CHECK(out_start == 0);
815  BOOST_CHECK(out_end == 0);
816 
817  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::HALFYEAR);
818  success = stock.getIndexRange(query, out_start, out_end);
819  BOOST_CHECK(success == false);
820  BOOST_CHECK(out_start == 0);
821  BOOST_CHECK(out_end == 0);
822 
823  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::YEAR);
824  success = stock.getIndexRange(query, out_start, out_end);
825  BOOST_CHECK(success == false);
826  BOOST_CHECK(out_start == 0);
827  BOOST_CHECK(out_end == 0);
828 
829  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN);
830  success = stock.getIndexRange(query, out_start, out_end);
831  BOOST_CHECK(success == false);
832  BOOST_CHECK(out_start == 0);
833  BOOST_CHECK(out_end == 0);
834 
835  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN5);
836  success = stock.getIndexRange(query, out_start, out_end);
837  BOOST_CHECK(success == false);
838  BOOST_CHECK(out_start == 0);
839  BOOST_CHECK(out_end == 0);
840 
841  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN15);
842  success = stock.getIndexRange(query, out_start, out_end);
843  BOOST_CHECK(success == false);
844  BOOST_CHECK(out_start == 0);
845  BOOST_CHECK(out_end == 0);
846 
847  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN30);
848  success = stock.getIndexRange(query, out_start, out_end);
849  BOOST_CHECK(success == false);
850  BOOST_CHECK(out_start == 0);
851  BOOST_CHECK(out_end == 0);
852 
853  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN60);
854  success = stock.getIndexRange(query, out_start, out_end);
855  BOOST_CHECK(success == false);
856  BOOST_CHECK(out_start == 0);
857  BOOST_CHECK(out_end == 0);
858 
860  query = KQuery(1,10);
861  success = stock.getIndexRange(query, out_start, out_end);
862  BOOST_CHECK(success == true);
863  BOOST_CHECK(out_start == 1);
864  BOOST_CHECK(out_end == 10);
865 
866  query = KQuery(1,10, KQuery::WEEK);
867  success = stock.getIndexRange(query, out_start, out_end);
868  BOOST_CHECK(success == true);
869  BOOST_CHECK(out_start == 1);
870  BOOST_CHECK(out_end == 10);
871 
872  query = KQuery(1,10, KQuery::MONTH);
873  success = stock.getIndexRange(query, out_start, out_end);
874  BOOST_CHECK(success == true);
875  BOOST_CHECK(out_start == 1);
876  BOOST_CHECK(out_end == 10);
877 
878  query = KQuery(1,10, KQuery::QUARTER);
879  success = stock.getIndexRange(query, out_start, out_end);
880  BOOST_CHECK(success == true);
881  BOOST_CHECK(out_start == 1);
882  BOOST_CHECK(out_end == 10);
883 
884  query = KQuery(1,10, KQuery::HALFYEAR);
885  success = stock.getIndexRange(query, out_start, out_end);
886  BOOST_CHECK(success == true);
887  BOOST_CHECK(out_start == 1);
888  BOOST_CHECK(out_end == 10);
889 
890  query = KQuery(1,10, KQuery::YEAR);
891  success = stock.getIndexRange(query, out_start, out_end);
892  BOOST_CHECK(success == true);
893  BOOST_CHECK(out_start == 1);
894  BOOST_CHECK(out_end == 10);
895 
896  query = KQuery(1,10, KQuery::MIN);
897  success = stock.getIndexRange(query, out_start, out_end);
898  BOOST_CHECK(success == true);
899  BOOST_CHECK(out_start == 1);
900  BOOST_CHECK(out_end == 10);
901 
902  query = KQuery(1,10, KQuery::MIN5);
903  success = stock.getIndexRange(query, out_start, out_end);
904  BOOST_CHECK(success == true);
905  BOOST_CHECK(out_start == 1);
906  BOOST_CHECK(out_end == 10);
907 
908  query = KQuery(1,10, KQuery::MIN15);
909  success = stock.getIndexRange(query, out_start, out_end);
910  BOOST_CHECK(success == true);
911  BOOST_CHECK(out_start == 1);
912  BOOST_CHECK(out_end == 10);
913 
914  query = KQuery(1,10, KQuery::MIN30);
915  success = stock.getIndexRange(query, out_start, out_end);
916  BOOST_CHECK(success == true);
917  BOOST_CHECK(out_start == 1);
918  BOOST_CHECK(out_end == 10);
919 
920  query = KQuery(1,10, KQuery::MIN60);
921  success = stock.getIndexRange(query, out_start, out_end);
922  BOOST_CHECK(success == true);
923  BOOST_CHECK(out_start == 1);
924  BOOST_CHECK(out_end == 10);
925 
927  query = KQueryByDate(Datetime(199012200000), Datetime(199101030000));
928  success = stock.getIndexRange(query, out_start, out_end);
929  BOOST_CHECK(success == true);
930  BOOST_CHECK(out_start == 1);
931  BOOST_CHECK(out_end == 10);
932 
933  query = KQueryByDate(Datetime(199102250000), Datetime(199104290000), KQuery::WEEK);
934  success = stock.getIndexRange(query, out_start, out_end);
935  BOOST_CHECK(success == true);
936  BOOST_CHECK(out_start == 10);
937  BOOST_CHECK(out_end == 19);
938 
939  query = KQueryByDate(Datetime(199108010000), Datetime(199201010000), KQuery::MONTH);
940  success = stock.getIndexRange(query, out_start, out_end);
941  BOOST_CHECK(success == true);
942  BOOST_CHECK(out_start == 8);
943  BOOST_CHECK(out_end == 13);
944 
945  query = KQueryByDate(Datetime(199201010000), Datetime(199310010000), KQuery::QUARTER);
946  success = stock.getIndexRange(query, out_start, out_end);
947  BOOST_CHECK(success == true);
948  BOOST_CHECK(out_start == 5);
949  BOOST_CHECK(out_end == 12);
950 
951  query = KQueryByDate(Datetime(199401010000), Datetime(199801010000), KQuery::HALFYEAR);
952  success = stock.getIndexRange(query, out_start, out_end);
953  BOOST_CHECK(success == true);
954  BOOST_CHECK(out_start == 7);
955  BOOST_CHECK(out_end == 15);
956 
957  query = KQueryByDate(Datetime(199601010000), Datetime(200001010000), KQuery::YEAR);
958  success = stock.getIndexRange(query, out_start, out_end);
959  BOOST_CHECK(success == true);
960  BOOST_CHECK(out_start == 6);
961  BOOST_CHECK(out_end == 10);
962 
963  query = KQueryByDate(Datetime(200602171016), Datetime(200602171026), KQuery::MIN);
964  success = stock.getIndexRange(query, out_start, out_end);
965  BOOST_CHECK(success == true);
966  BOOST_CHECK(out_start == 343796L);
967  BOOST_CHECK(out_end == 343806L);
968 
969  query = KQueryByDate(Datetime(200001041025), Datetime(200001041100), KQuery::MIN5);
970  success = stock.getIndexRange(query, out_start, out_end);
971  BOOST_CHECK(success == true);
972  BOOST_CHECK(out_start == 10);
973  BOOST_CHECK(out_end == 17);
974 
975  query = KQueryByDate(Datetime(200001041415), Datetime(200001050945), KQuery::MIN15);
976  success = stock.getIndexRange(query, out_start, out_end);
977  BOOST_CHECK(success == true);
978  BOOST_CHECK(out_start == 12);
979  BOOST_CHECK(out_end == 16);
980 
981  query = KQueryByDate(Datetime(200001041330), Datetime(200001051500), KQuery::MIN30);
982  success = stock.getIndexRange(query, out_start, out_end);
983  BOOST_CHECK(success == true);
984  BOOST_CHECK(out_start == 4);
985  BOOST_CHECK(out_end == 15);
986 
987  query = KQueryByDate(Datetime(200001061400), Datetime(200001101130), KQuery::MIN60);
988  success = stock.getIndexRange(query, out_start, out_end);
989  BOOST_CHECK(success == true);
990  BOOST_CHECK(out_start == 10);
991  BOOST_CHECK(out_end == 17);
992 
994  query = KQueryByDate(Datetime(199012220000), Datetime(199101050000));
995  success = stock.getIndexRange(query, out_start, out_end);
996  BOOST_CHECK(success == true);
997  BOOST_CHECK(out_start == 3);
998  BOOST_CHECK(out_end == 12);
999 
1000  query = KQueryByDate(Datetime(199102200000), Datetime(199104230000), KQuery::WEEK);
1001  success = stock.getIndexRange(query, out_start, out_end);
1002  BOOST_CHECK(success == true);
1003  BOOST_CHECK(out_start == 10);
1004  BOOST_CHECK(out_end == 19);
1005 
1006  query = KQueryByDate(Datetime(199107020000), Datetime(199112300000), KQuery::MONTH);
1007  success = stock.getIndexRange(query, out_start, out_end);
1008  BOOST_CHECK(success == true);
1009  BOOST_CHECK(out_start == 8);
1010  BOOST_CHECK(out_end == 13);
1011 
1012  query = KQueryByDate(Datetime(199112210000), Datetime(199308010000), KQuery::QUARTER);
1013  success = stock.getIndexRange(query, out_start, out_end);
1014  BOOST_CHECK(success == true);
1015  BOOST_CHECK(out_start == 5);
1016  BOOST_CHECK(out_end == 12);
1017 
1018  query = KQueryByDate(Datetime(199311010000), Datetime(199711010000), KQuery::HALFYEAR);
1019  success = stock.getIndexRange(query, out_start, out_end);
1020  BOOST_CHECK(success == true);
1021  BOOST_CHECK(out_start == 7);
1022  BOOST_CHECK(out_end == 15);
1023 
1024  query = KQueryByDate(Datetime(199502010000), Datetime(199912010000), KQuery::YEAR);
1025  success = stock.getIndexRange(query, out_start, out_end);
1026  BOOST_CHECK(success == true);
1027  BOOST_CHECK(out_start == 6);
1028  BOOST_CHECK(out_end == 10);
1029 
1030  query = KQueryByDate(Datetime(200602171016), Datetime(200602171026), KQuery::MIN);
1031  success = stock.getIndexRange(query, out_start, out_end);
1032  BOOST_CHECK(success == true);
1033  BOOST_CHECK(out_start == 343796L);
1034  BOOST_CHECK(out_end == 343806L);
1035 
1036  query = KQueryByDate(Datetime(200001041025), Datetime(200001041100), KQuery::MIN5);
1037  success = stock.getIndexRange(query, out_start, out_end);
1038  BOOST_CHECK(success == true);
1039  BOOST_CHECK(out_start == 10);
1040  BOOST_CHECK(out_end == 17);
1041 
1042  query = KQueryByDate(Datetime(200001041415), Datetime(200001050945), KQuery::MIN15);
1043  success = stock.getIndexRange(query, out_start, out_end);
1044  BOOST_CHECK(success == true);
1045  BOOST_CHECK(out_start == 12);
1046  BOOST_CHECK(out_end == 16);
1047 
1048  query = KQueryByDate(Datetime(200001041330), Datetime(200001051500), KQuery::MIN30);
1049  success = stock.getIndexRange(query, out_start, out_end);
1050  BOOST_CHECK(success == true);
1051  BOOST_CHECK(out_start == 4);
1052  BOOST_CHECK(out_end == 15);
1053 
1054  query = KQueryByDate(Datetime(200001061400), Datetime(200001101130), KQuery::MIN60);
1055  success = stock.getIndexRange(query, out_start, out_end);
1056  BOOST_CHECK(success == true);
1057  BOOST_CHECK(out_start == 10);
1058  BOOST_CHECK(out_end == 17);
1059 
1061  query = KQuery(-1,0);
1062  success = stock.getIndexRange(query, out_start, out_end);
1063  BOOST_CHECK(success == false);
1064  BOOST_CHECK(out_start == 0);
1065  BOOST_CHECK(out_end == 0);
1066 
1067  query = KQuery(0,-1);
1068  success = stock.getIndexRange(query, out_start, out_end);
1069  BOOST_CHECK(success == true);
1070  BOOST_CHECK(out_start == 0);
1071  BOOST_CHECK(out_end == 5120);
1072 
1073  query = KQuery(-1,-1);
1074  success = stock.getIndexRange(query, out_start, out_end);
1075  BOOST_CHECK(success == false);
1076  BOOST_CHECK(out_start == 0);
1077  BOOST_CHECK(out_end == 0);
1078 
1079  query = KQuery(-1, -2);
1080  success = stock.getIndexRange(query, out_start, out_end);
1081  BOOST_CHECK(success == false);
1082  BOOST_CHECK(out_start == 0);
1083  BOOST_CHECK(out_end == 0);
1084 
1085  query = KQuery(-2,-1);
1086  success = stock.getIndexRange(query, out_start, out_end);
1087  BOOST_CHECK(success == true);
1088  BOOST_CHECK(out_start == 5119);
1089  BOOST_CHECK(out_end == 5120);
1090 
1091  query = KQuery(-5120,-1);
1092  success = stock.getIndexRange(query, out_start, out_end);
1093  BOOST_CHECK(success == true);
1094  BOOST_CHECK(out_start == 1);
1095  BOOST_CHECK(out_end == 5120);
1096 }
1097 
1098 
1100 BOOST_AUTO_TEST_CASE( test_Stock_getKRecordList ) {
1101  StockManager& sm = StockManager::instance();
1102  Stock stock = sm.getStock("sh000001");
1103  KRecordList result;
1104  KRecord record, expect;
1105  size_t total;
1106 
1110 
1111  total = stock.getCount(KQuery::DAY);
1112  result = stock.getKRecordList(0, total, KQuery::DAY);
1113  BOOST_CHECK(result.size() == total);
1114  BOOST_CHECK(result[0] == KRecord(Datetime(199012190000), 96.050, 99.980, 95.790, 99.980, 49.4, 1260));
1115  BOOST_CHECK(result[10] == KRecord(Datetime(199101030000), 128.840, 130.140, 128.840, 130.140, 9.3, 141));
1116  BOOST_CHECK(result[5120] == KRecord(Datetime(201112060000), 2326.660, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078));
1117 
1119  result = stock.getKRecordList(0, total + 1, KQuery::DAY);
1120  BOOST_CHECK(result.size() == total);
1121  BOOST_CHECK(result[0] == KRecord(Datetime(199012190000), 96.050, 99.980, 95.790, 99.980, 49.4, 1260));
1122  BOOST_CHECK(result[10] == KRecord(Datetime(199101030000), 128.840, 130.140, 128.840, 130.140, 9.3, 141));
1123  BOOST_CHECK(result[5120] == KRecord(Datetime(201112060000), 2326.660, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078));
1124 
1126  result = stock.getKRecordList(1, 10, KQuery::DAY);
1127  BOOST_CHECK(result.size() == 9);
1128  BOOST_CHECK(result[0] == KRecord(Datetime(199012200000), 104.300, 104.390, 99.980, 104.390, 8.4, 197));
1129  BOOST_CHECK(result[1] == KRecord(Datetime(199012210000), 109.070, 109.130, 103.730, 109.130, 1.6, 28));
1130  BOOST_CHECK(result[8] == KRecord(Datetime(199101020000), 127.610, 128.840, 127.610, 128.840, 5.9, 91));
1131 
1133  result = stock.getKRecordList(0,0, KQuery::DAY);
1134  BOOST_CHECK(result.size() == 0);
1135 
1137  result = stock.getKRecordList(total, total, KQuery::DAY);
1138  BOOST_CHECK(result.size() == 0);
1139 
1141  result = stock.getKRecordList(2, 1, KQuery::DAY);
1142  BOOST_CHECK(result.size() == 0);
1143 
1145  result = stock.getKRecordList(0, 1, KQuery::DAY);
1146  BOOST_CHECK(result.size() == 1);
1147  BOOST_CHECK(result[0] == KRecord(Datetime(199012190000), 96.050, 99.980, 95.790, 99.980, 49.4, 1260));
1148 
1150  result = stock.getKRecordList(total - 1, total, KQuery::DAY);
1151  BOOST_CHECK(result.size() == 1);
1152  BOOST_CHECK(result[0] == KRecord(Datetime(201112060000), 2326.660, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078));
1153 
1155  result = stock.getKRecordList(total - 1, total + 1, KQuery::DAY);
1156  BOOST_CHECK(result.size() == 1);
1157  BOOST_CHECK(result[0] == KRecord(Datetime(201112060000), 2326.660, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078));
1158 
1162 
1163  total = stock.getCount(KQuery::WEEK);
1164  result = stock.getKRecordList(0, total, KQuery::WEEK);
1165  BOOST_CHECK(result.size() == total);
1166  BOOST_CHECK(result[0] == KRecord(Datetime(199012170000), 96.05, 109.13, 95.79, 109.130, 59.4, 1485));
1167  BOOST_CHECK(result[1] == KRecord(Datetime(199012240000), 113.57, 126.45, 109.13, 126.450, 28.2, 321));
1168  BOOST_CHECK(result[1058] == KRecord(Datetime(201112050000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048));
1169 
1170 
1172  result = stock.getKRecordList(0, total + 1, KQuery::WEEK);
1173  BOOST_CHECK(result.size() == total);
1174  BOOST_CHECK(result[0] == KRecord(Datetime(199012170000), 96.05, 109.13, 95.79, 109.130, 59.4, 1485));
1175  BOOST_CHECK(result[1] == KRecord(Datetime(199012240000), 113.57, 126.45, 109.13, 126.450, 28.2, 321));
1176  BOOST_CHECK(result[1058] == KRecord(Datetime(201112050000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048));
1177 
1179  result = stock.getKRecordList(1, 10, KQuery::WEEK);
1180  BOOST_CHECK(result.size() == 9);
1181  BOOST_CHECK(result[0] == KRecord(Datetime(199012240000), 113.57, 126.45, 109.13, 126.450, 28.2, 321));
1182  BOOST_CHECK(result[1] == KRecord(Datetime(199012310000), 126.56, 131.44, 126.48, 131.440, 47.3, 730));
1183  BOOST_CHECK(result[8] == KRecord(Datetime(199102180000), 133.12, 134.87, 133.08, 134.870, 551, 9271));
1184 
1186  result = stock.getKRecordList(0,0, KQuery::WEEK);
1187  BOOST_CHECK(result.size() == 0);
1188 
1190  result = stock.getKRecordList(total, total, KQuery::WEEK);
1191  BOOST_CHECK(result.size() == 0);
1192 
1194  result = stock.getKRecordList(2, 1, KQuery::WEEK);
1195  BOOST_CHECK(result.size() == 0);
1196 
1198  result = stock.getKRecordList(0, 1, KQuery::WEEK);
1199  BOOST_CHECK(result.size() == 1);
1200  BOOST_CHECK(result[0] == KRecord(Datetime(199012170000), 96.05, 109.13, 95.79, 109.130, 59.4, 1485));
1201 
1203  result = stock.getKRecordList(total - 1, total, KQuery::WEEK);
1204  BOOST_CHECK(result.size() == 1);
1205  BOOST_CHECK(result[0] == KRecord(Datetime(201112050000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048));
1206 
1208  result = stock.getKRecordList(total - 1, total + 1, KQuery::WEEK);
1209  BOOST_CHECK(result.size() == 1);
1210  BOOST_CHECK(result[0] == KRecord(Datetime(201112050000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048));
1211 
1212 
1216 
1217  total = stock.getCount(KQuery::MONTH);
1218  result = stock.getKRecordList(0, total, KQuery::MONTH);
1219  BOOST_CHECK(result.size() == total);
1220  BOOST_CHECK(result[0] == KRecord(Datetime(199012010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1221  BOOST_CHECK(result[1] == KRecord(Datetime(199101010000), 127.61, 135.19, 127.61, 129.970, 3637.1, 67197));
1222  BOOST_CHECK(result[252] == KRecord(Datetime(201112010000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941));
1223 
1224 
1226  result = stock.getKRecordList(0, total + 1, KQuery::MONTH);
1227  BOOST_CHECK(result.size() == total);
1228  BOOST_CHECK(result[0] == KRecord(Datetime(199012010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1229  BOOST_CHECK(result[1] == KRecord(Datetime(199101010000), 127.61, 135.19, 127.61, 129.970, 3637.1, 67197));
1230  BOOST_CHECK(result[252] == KRecord(Datetime(201112010000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941));
1231 
1233  result = stock.getKRecordList(1, 10, KQuery::MONTH);
1234  BOOST_CHECK(result.size() == 9);
1235  BOOST_CHECK(result[0] == KRecord(Datetime(199101010000), 127.61, 135.19, 127.61, 129.970, 3637.1, 67197));
1236  BOOST_CHECK(result[1] == KRecord(Datetime(199102010000), 129.5, 134.87, 128.06, 133.010, 3027.3, 50982));
1237  BOOST_CHECK(result[8] == KRecord(Datetime(199109010000), 180.08, 191.18, 178.43, 180.920, 19410.4, 286133));
1238 
1240  result = stock.getKRecordList(0,0, KQuery::MONTH);
1241  BOOST_CHECK(result.size() == 0);
1242 
1244  result = stock.getKRecordList(total, total, KQuery::MONTH);
1245  BOOST_CHECK(result.size() == 0);
1246 
1248  result = stock.getKRecordList(2, 1, KQuery::MONTH);
1249  BOOST_CHECK(result.size() == 0);
1250 
1252  result = stock.getKRecordList(0, 1, KQuery::MONTH);
1253  BOOST_CHECK(result.size() == 1);
1254  BOOST_CHECK(result[0] == KRecord(Datetime(199012010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1255 
1257  result = stock.getKRecordList(total - 1, total, KQuery::MONTH);
1258  BOOST_CHECK(result.size() == 1);
1259  BOOST_CHECK(result[0] == KRecord(Datetime(201112010000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941));
1260 
1262  result = stock.getKRecordList(total - 1, total + 1, KQuery::MONTH);
1263  BOOST_CHECK(result.size() == 1);
1264  BOOST_CHECK(result[0] == KRecord(Datetime(201112010000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941));
1265 
1266 
1270 
1271  total = stock.getCount(KQuery::QUARTER);
1272  result = stock.getKRecordList(0, total, KQuery::QUARTER);
1273  BOOST_CHECK(result.size() == total);
1274  BOOST_CHECK(result[0] == KRecord(Datetime(199010010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1275  BOOST_CHECK(result[1] == KRecord(Datetime(199101010000), 127.61, 135.19, 120.11, 120.190, 8389.7, 142707));
1276  BOOST_CHECK(result[84] == KRecord(Datetime(201110010000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936));
1277 
1278 
1280  result = stock.getKRecordList(0, total + 1, KQuery::QUARTER);
1281  BOOST_CHECK(result.size() == total);
1282  BOOST_CHECK(result[0] == KRecord(Datetime(199010010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1283  BOOST_CHECK(result[1] == KRecord(Datetime(199101010000), 127.61, 135.19, 120.11, 120.190, 8389.7, 142707));
1284  BOOST_CHECK(result[84] == KRecord(Datetime(201110010000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936));
1285 
1287  result = stock.getKRecordList(1, 10, KQuery::QUARTER);
1288  BOOST_CHECK(result.size() == 9);
1289  BOOST_CHECK(result[0] == KRecord(Datetime(199101010000), 127.61, 135.19, 120.11, 120.190, 8389.7, 142707));
1290  BOOST_CHECK(result[1] == KRecord(Datetime(199104010000), 120.69, 137.56, 104.96, 137.560, 12095.6, 222753));
1291  BOOST_CHECK(result[8] == KRecord(Datetime(199301010000), 784.13, 1558.95, 777.16, 925.910, 5003866.3, 26182794));
1292 
1294  result = stock.getKRecordList(0,0, KQuery::QUARTER);
1295  BOOST_CHECK(result.size() == 0);
1296 
1298  result = stock.getKRecordList(total, total, KQuery::QUARTER);
1299  BOOST_CHECK(result.size() == 0);
1300 
1302  result = stock.getKRecordList(2, 1, KQuery::QUARTER);
1303  BOOST_CHECK(result.size() == 0);
1304 
1306  result = stock.getKRecordList(0, 1, KQuery::QUARTER);
1307  BOOST_CHECK(result.size() == 1);
1308  BOOST_CHECK(result[0] == KRecord(Datetime(199010010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1309 
1311  result = stock.getKRecordList(total - 1, total, KQuery::QUARTER);
1312  BOOST_CHECK(result.size() == 1);
1313  BOOST_CHECK(result[0] == KRecord(Datetime(201110010000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936));
1314 
1316  result = stock.getKRecordList(total - 1, total + 1, KQuery::QUARTER);
1317  BOOST_CHECK(result.size() == 1);
1318  BOOST_CHECK(result[0] == KRecord(Datetime(201110010000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936));
1319 
1323 
1324  total = stock.getCount(KQuery::HALFYEAR);
1325  result = stock.getKRecordList(0, total, KQuery::HALFYEAR);
1326  BOOST_CHECK(result.size() == total);
1327  BOOST_CHECK(result[0] == KRecord(Datetime(199007010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1328  BOOST_CHECK(result[1] == KRecord(Datetime(199101010000), 127.61, 137.56, 104.96, 137.560, 20485.3, 365460));
1329  BOOST_CHECK(result[42] == KRecord(Datetime(201107010000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694));
1330 
1331 
1333  result = stock.getKRecordList(0, total + 1, KQuery::HALFYEAR);
1334  BOOST_CHECK(result.size() == total);
1335  BOOST_CHECK(result[0] == KRecord(Datetime(199007010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1336  BOOST_CHECK(result[1] == KRecord(Datetime(199101010000), 127.61, 137.56, 104.96, 137.560, 20485.3, 365460));
1337  BOOST_CHECK(result[42] == KRecord(Datetime(201107010000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694));
1338 
1340  result = stock.getKRecordList(1, 10, KQuery::HALFYEAR);
1341  BOOST_CHECK(result.size() == 9);
1342  BOOST_CHECK(result[0] == KRecord(Datetime(199101010000), 127.61, 137.56, 104.96, 137.560, 20485.3, 365460));
1343  BOOST_CHECK(result[1] == KRecord(Datetime(199107010000), 136.64, 292.75, 131.87, 292.750, 60078.8, 890458));
1344  BOOST_CHECK(result[8] == KRecord(Datetime(199501010000), 637.72, 926.41, 524.43, 630.580, 12294596.7, 164388191));
1345 
1347  result = stock.getKRecordList(0,0, KQuery::HALFYEAR);
1348  BOOST_CHECK(result.size() == 0);
1349 
1351  result = stock.getKRecordList(total, total, KQuery::HALFYEAR);
1352  BOOST_CHECK(result.size() == 0);
1353 
1355  result = stock.getKRecordList(2, 1, KQuery::HALFYEAR);
1356  BOOST_CHECK(result.size() == 0);
1357 
1359  result = stock.getKRecordList(0, 1, KQuery::HALFYEAR);
1360  BOOST_CHECK(result.size() == 1);
1361  BOOST_CHECK(result[0] == KRecord(Datetime(199007010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1362 
1364  result = stock.getKRecordList(total - 1, total, KQuery::HALFYEAR);
1365  BOOST_CHECK(result.size() == 1);
1366  BOOST_CHECK(result[0] == KRecord(Datetime(201107010000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694));
1367 
1369  result = stock.getKRecordList(total - 1, total + 1, KQuery::HALFYEAR);
1370  BOOST_CHECK(result.size() == 1);
1371  BOOST_CHECK(result[0] == KRecord(Datetime(201107010000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694));
1372 
1373 
1377 
1378  total = stock.getCount(KQuery::YEAR);
1379  result = stock.getKRecordList(0, total, KQuery::YEAR);
1380  BOOST_CHECK(result.size() == total);
1381  BOOST_CHECK(result[0] == KRecord(Datetime(199001010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1382  BOOST_CHECK(result[1] == KRecord(Datetime(199101010000), 127.61, 292.75, 104.96, 292.750, 80564.1, 1255918));
1383  BOOST_CHECK(result[21] == KRecord(Datetime(201101010000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512));
1384 
1385 
1387  result = stock.getKRecordList(0, total + 1, KQuery::YEAR);
1388  BOOST_CHECK(result.size() == total);
1389  BOOST_CHECK(result[0] == KRecord(Datetime(199001010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1390  BOOST_CHECK(result[1] == KRecord(Datetime(199101010000), 127.61, 292.75, 104.96, 292.750, 80564.1, 1255918));
1391  BOOST_CHECK(result[21] == KRecord(Datetime(201101010000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512));
1392 
1394  result = stock.getKRecordList(1, 10, KQuery::YEAR);
1395  BOOST_CHECK(result.size() == 9);
1396  BOOST_CHECK(result[0] == KRecord(Datetime(199101010000), 127.61, 292.75, 104.96, 292.750, 80564.1, 1255918));
1397  BOOST_CHECK(result[1] == KRecord(Datetime(199201010000), 293.74, 1429.01, 292.76, 780.390, 2497452.9, 18170898));
1398  BOOST_CHECK(result[8] == KRecord(Datetime(199901010000), 1144.888, 1756.184, 1047.833, 1366.580, 181932093.8, 2287638100));
1399 
1401  result = stock.getKRecordList(0,0, KQuery::YEAR);
1402  BOOST_CHECK(result.size() == 0);
1403 
1405  result = stock.getKRecordList(total, total, KQuery::YEAR);
1406  BOOST_CHECK(result.size() == 0);
1407 
1409  result = stock.getKRecordList(2, 1, KQuery::YEAR);
1410  BOOST_CHECK(result.size() == 0);
1411 
1413  result = stock.getKRecordList(0, 1, KQuery::YEAR);
1414  BOOST_CHECK(result.size() == 1);
1415  BOOST_CHECK(result[0] == KRecord(Datetime(199001010000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1416 
1418  result = stock.getKRecordList(total - 1, total, KQuery::YEAR);
1419  BOOST_CHECK(result.size() == 1);
1420  BOOST_CHECK(result[0] == KRecord(Datetime(201101010000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512));
1421 
1423  result = stock.getKRecordList(total - 1, total + 1, KQuery::YEAR);
1424  BOOST_CHECK(result.size() == 1);
1425  BOOST_CHECK(result[0] == KRecord(Datetime(201101010000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512));
1426 
1427 
1431 
1432  total = stock.getCount(KQuery::MIN);
1433  result = stock.getKRecordList(0, total, KQuery::MIN);
1434  BOOST_CHECK(result.size() == total);
1435  BOOST_CHECK(result[0] == KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158));
1436  BOOST_CHECK(result[1] == KRecord(Datetime(200001040932), 1368.3, 1368.491, 1368.3, 1368.491, 2783200, 106916));
1437  BOOST_CHECK(result[682822] == KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.900, 5215150, 566312));
1438 
1439 
1441  result = stock.getKRecordList(0, total + 1, KQuery::MIN);
1442  BOOST_CHECK(result.size() == total);
1443  BOOST_CHECK(result[0] == KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158));
1444  BOOST_CHECK(result[1] == KRecord(Datetime(200001040932), 1368.3, 1368.491, 1368.3, 1368.491, 2783200, 106916));
1445  BOOST_CHECK(result[682822] == KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.900, 5215150, 566312));
1446 
1448  result = stock.getKRecordList(1, 10, KQuery::MIN);
1449  BOOST_CHECK(result.size() == 9);
1450  BOOST_CHECK(result[0] == KRecord(Datetime(200001040932), 1368.3, 1368.491, 1368.3, 1368.491, 2783200, 106916));
1451  BOOST_CHECK(result[1] == KRecord(Datetime(200001040933), 1368.859, 1369.474, 1368.859, 1369.308, 1060260, 37789));
1452  BOOST_CHECK(result[8] == KRecord(Datetime(200001040940), 1367.651, 1367.662, 1367.389, 1367.389, 1335200, 41924));
1453 
1455  result = stock.getKRecordList(0,0, KQuery::MIN);
1456  BOOST_CHECK(result.size() == 0);
1457 
1459  result = stock.getKRecordList(total, total, KQuery::MIN);
1460  BOOST_CHECK(result.size() == 0);
1461 
1463  result = stock.getKRecordList(2, 1, KQuery::MIN);
1464  BOOST_CHECK(result.size() == 0);
1465 
1467  result = stock.getKRecordList(0, 1, KQuery::MIN);
1468  BOOST_CHECK(result.size() == 1);
1469  BOOST_CHECK(result[0] == KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158));
1470 
1472  result = stock.getKRecordList(total - 1, total, KQuery::MIN);
1473  BOOST_CHECK(result.size() == 1);
1474  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.900, 5215150, 566312));
1475 
1477  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN);
1478  BOOST_CHECK(result.size() == 1);
1479  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.900, 5215150, 566312));
1480 
1481 
1485 
1486  total = stock.getCount(KQuery::MIN5);
1487  result = stock.getKRecordList(0, total, KQuery::MIN5);
1488  BOOST_CHECK(result.size() == total);
1489  BOOST_CHECK(result[0] == KRecord(Datetime(200001040935), 1366.58, 1369.68, 1366.579, 1369.187, 106611.5, 438171));
1490  BOOST_CHECK(result[1] == KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389, 70687.3, 251473));
1491  BOOST_CHECK(result[133979] == KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675));
1492 
1493 
1495  result = stock.getKRecordList(0, total + 1, KQuery::MIN5);
1496  BOOST_CHECK(result.size() == total);
1497  BOOST_CHECK(result[0] == KRecord(Datetime(200001040935), 1366.58, 1369.68, 1366.579, 1369.187, 106611.5, 438171));
1498  BOOST_CHECK(result[1] == KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389, 70687.3, 251473));
1499  BOOST_CHECK(result[133979] == KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675));
1500 
1502  result = stock.getKRecordList(1, 10, KQuery::MIN5);
1503  BOOST_CHECK(result.size() == 9);
1504  BOOST_CHECK(result[0] == KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389, 70687.3, 251473));
1505  BOOST_CHECK(result[1] == KRecord(Datetime(200001040945), 1367.389, 1367.389, 1364.645, 1364.763, 73577.1, 223346));
1506  BOOST_CHECK(result[8] == KRecord(Datetime(200001041020), 1366.043, 1366.458, 1365.946, 1366.458, 111601.7, 205190));
1507 
1509  result = stock.getKRecordList(0,0, KQuery::MIN5);
1510  BOOST_CHECK(result.size() == 0);
1511 
1513  result = stock.getKRecordList(total, total, KQuery::MIN5);
1514  BOOST_CHECK(result.size() == 0);
1515 
1517  result = stock.getKRecordList(2, 1, KQuery::MIN5);
1518  BOOST_CHECK(result.size() == 0);
1519 
1521  result = stock.getKRecordList(0, 1, KQuery::MIN5);
1522  BOOST_CHECK(result.size() == 1);
1523  BOOST_CHECK(result[0] == KRecord(Datetime(200001040935), 1366.58, 1369.68, 1366.579, 1369.187, 106611.5, 438171));
1524 
1526  result = stock.getKRecordList(total - 1, total, KQuery::MIN5);
1527  BOOST_CHECK(result.size() == 1);
1528  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675));
1529 
1531  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN5);
1532  BOOST_CHECK(result.size() == 1);
1533  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675));
1534 
1538 
1539  total = stock.getCount(KQuery::MIN15);
1540  result = stock.getKRecordList(0, total, KQuery::MIN15);
1541  BOOST_CHECK(result.size() == total);
1542  BOOST_CHECK(result[0] == KRecord(Datetime(200001040945), 1366.58, 1369.68, 1364.645, 1364.763, 250875.9, 912990));
1543  BOOST_CHECK(result[1] == KRecord(Datetime(200001041000), 1364.763, 1364.763, 1361.459, 1361.459, 204277.1, 457452));
1544  BOOST_CHECK(result[44749] == KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591));
1545 
1546 
1548  result = stock.getKRecordList(0, total + 1, KQuery::MIN15);
1549  BOOST_CHECK(result.size() == total);
1550  BOOST_CHECK(result[0] == KRecord(Datetime(200001040945), 1366.58, 1369.68, 1364.645, 1364.763, 250875.9, 912990));
1551  BOOST_CHECK(result[1] == KRecord(Datetime(200001041000), 1364.763, 1364.763, 1361.459, 1361.459, 204277.1, 457452));
1552  BOOST_CHECK(result[44749] == KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591));
1553 
1555  result = stock.getKRecordList(1, 10, KQuery::MIN15);
1556  BOOST_CHECK(result.size() == 9);
1557  BOOST_CHECK(result[0] == KRecord(Datetime(200001041000), 1364.763, 1364.763, 1361.459, 1361.459, 204277.1, 457452));
1558  BOOST_CHECK(result[1] == KRecord(Datetime(200001041015), 1361.558, 1366.093, 1361.295, 1365.927, 307531.8, 548313));
1559  BOOST_CHECK(result[8] == KRecord(Datetime(200001041330), 1399.56, 1399.664, 1396.679, 1399.325, 407799.9, 554965));
1560 
1562  result = stock.getKRecordList(0,0, KQuery::MIN15);
1563  BOOST_CHECK(result.size() == 0);
1564 
1566  result = stock.getKRecordList(total, total, KQuery::MIN15);
1567  BOOST_CHECK(result.size() == 0);
1568 
1570  result = stock.getKRecordList(2, 1, KQuery::MIN15);
1571  BOOST_CHECK(result.size() == 0);
1572 
1574  result = stock.getKRecordList(0, 1, KQuery::MIN15);
1575  BOOST_CHECK(result.size() == 1);
1576  BOOST_CHECK(result[0] == KRecord(Datetime(200001040945), 1366.58, 1369.68, 1364.645, 1364.763, 250875.9, 912990));
1577 
1579  result = stock.getKRecordList(total - 1, total, KQuery::MIN15);
1580  BOOST_CHECK(result.size() == 1);
1581  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591));
1582 
1584  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN15);
1585  BOOST_CHECK(result.size() == 1);
1586  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591));
1587 
1588 
1592 
1593  total = stock.getCount(KQuery::MIN30);
1594  result = stock.getKRecordList(0, total, KQuery::MIN30);
1595  BOOST_CHECK(result.size() == total);
1596  BOOST_CHECK(result[0] == KRecord(Datetime(200001041000), 1366.58, 1369.68, 1361.459, 1361.459, 455153, 1370442));
1597  BOOST_CHECK(result[1] == KRecord(Datetime(200001041030), 1361.558, 1367.683, 1361.295, 1367.683, 586634.5, 1000294));
1598  BOOST_CHECK(result[22379] == KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054));
1599 
1600 
1602  result = stock.getKRecordList(0, total + 1, KQuery::MIN30);
1603  BOOST_CHECK(result.size() == total);
1604  BOOST_CHECK(result[0] == KRecord(Datetime(200001041000), 1366.58, 1369.68, 1361.459, 1361.459, 455153, 1370442));
1605  BOOST_CHECK(result[1] == KRecord(Datetime(200001041030), 1361.558, 1367.683, 1361.295, 1367.683, 586634.5, 1000294));
1606  BOOST_CHECK(result[22379] == KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054));
1607 
1609  result = stock.getKRecordList(1, 10, KQuery::MIN30);
1610  BOOST_CHECK(result.size() == 9);
1611  BOOST_CHECK(result[0] == KRecord(Datetime(200001041030), 1361.558, 1367.683, 1361.295, 1367.683, 586634.5, 1000294));
1612  BOOST_CHECK(result[1] == KRecord(Datetime(200001041100), 1367.667, 1378.543, 1367.6, 1377.098, 622250.5, 1248350));
1613  BOOST_CHECK(result[8] == KRecord(Datetime(200001051030), 1409.486, 1421.612, 1409.486, 1421.139, 1397089.8, 1777404));
1614 
1616  result = stock.getKRecordList(0,0, KQuery::MIN30);
1617  BOOST_CHECK(result.size() == 0);
1618 
1620  result = stock.getKRecordList(total, total, KQuery::MIN30);
1621  BOOST_CHECK(result.size() == 0);
1622 
1624  result = stock.getKRecordList(2, 1, KQuery::MIN30);
1625  BOOST_CHECK(result.size() == 0);
1626 
1628  result = stock.getKRecordList(0, 1, KQuery::MIN30);
1629  BOOST_CHECK(result.size() == 1);
1630  BOOST_CHECK(result[0] == KRecord(Datetime(200001041000), 1366.58, 1369.68, 1361.459, 1361.459, 455153, 1370442));
1631 
1633  result = stock.getKRecordList(total - 1, total, KQuery::MIN30);
1634  BOOST_CHECK(result.size() == 1);
1635  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054));
1636 
1638  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN30);
1639  BOOST_CHECK(result.size() == 1);
1640  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054));
1641 
1642 
1646 
1647  total = stock.getCount(KQuery::MIN60);
1648  result = stock.getKRecordList(0, total, KQuery::MIN60);
1649  BOOST_CHECK(result.size() == total);
1650  BOOST_CHECK(result[0] == KRecord(Datetime(200001041030), 1366.58, 1369.68, 1361.295, 1367.683, 1041787.5, 2370736));
1651  BOOST_CHECK(result[1] == KRecord(Datetime(200001041130), 1367.667, 1387.853, 1367.6, 1387.853, 1411191.4, 2172479));
1652  BOOST_CHECK(result[11192] == KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356));
1653 
1654 
1656  result = stock.getKRecordList(0, total + 1, KQuery::MIN60);
1657  BOOST_CHECK(result.size() == total);
1658  BOOST_CHECK(result[0] == KRecord(Datetime(200001041030), 1366.58, 1369.68, 1361.295, 1367.683, 1041787.5, 2370736));
1659  BOOST_CHECK(result[1] == KRecord(Datetime(200001041130), 1367.667, 1387.853, 1367.6, 1387.853, 1411191.4, 2172479));
1660  BOOST_CHECK(result[11192] == KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356));
1661 
1663  result = stock.getKRecordList(1, 10, KQuery::MIN60);
1664  BOOST_CHECK(result.size() == 9);
1665  BOOST_CHECK(result[0] == KRecord(Datetime(200001041130), 1367.667, 1387.853, 1367.6, 1387.853, 1411191.4, 2172479));
1666  BOOST_CHECK(result[1] == KRecord(Datetime(200001041400), 1389.996, 1403.996, 1389.97, 1400.685, 1740709.6, 2348753));
1667  BOOST_CHECK(result[8] == KRecord(Datetime(200001061130), 1420.098, 1420.098, 1410.706, 1411.387, 1291509.5, 1378193));
1668 
1670  result = stock.getKRecordList(0,0, KQuery::MIN60);
1671  BOOST_CHECK(result.size() == 0);
1672 
1674  result = stock.getKRecordList(total, total, KQuery::MIN60);
1675  BOOST_CHECK(result.size() == 0);
1676 
1678  result = stock.getKRecordList(2, 1, KQuery::MIN60);
1679  BOOST_CHECK(result.size() == 0);
1680 
1682  result = stock.getKRecordList(0, 1, KQuery::MIN60);
1683  BOOST_CHECK(result.size() == 1);
1684  BOOST_CHECK(result[0] == KRecord(Datetime(200001041030), 1366.58, 1369.68, 1361.295, 1367.683, 1041787.5, 2370736));
1685 
1687  result = stock.getKRecordList(total - 1, total, KQuery::MIN60);
1688  BOOST_CHECK(result.size() == 1);
1689  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356));
1690 
1692  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN60);
1693  BOOST_CHECK(result.size() == 1);
1694  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356));
1695 }
1696 
1697 
1699 BOOST_AUTO_TEST_CASE( test_Stock_getKRecordByDate ) {
1700  StockManager& sm = StockManager::instance();
1701  Stock stock = sm.getStock("sh000001");
1702  KRecord record;
1703 
1706 
1708  record = stock.getKRecordByDate(Datetime(199012180000), KQuery::DAY);
1709  BOOST_CHECK(record == Null<KRecord>());
1710 
1712  record = stock.getKRecordByDate(Datetime(199012190000), KQuery::DAY);
1713  BOOST_CHECK(record == KRecord(Datetime(199012190000), 96.0500, 99.9800, 95.7900, 99.9800, 49.4000, 1260.0000));
1714 
1716  record = stock.getKRecordByDate(Datetime(199502150000), KQuery::DAY);
1717  BOOST_CHECK(record == KRecord(Datetime(199502150000), 547.8300, 548.5900, 542.5000, 542.8400, 11889.3000, 232116.0000));
1718 
1720  record = stock.getKRecordByDate(Datetime(199502180000), KQuery::DAY);
1721  BOOST_CHECK(record == Null<KRecord>());
1722 
1724  record = stock.getKRecordByDate(Datetime(201112060000), KQuery::DAY);
1725  BOOST_CHECK(record == KRecord(Datetime(201112060000), 2326.6600, 2331.8920, 2310.1550, 2325.9050, 4262559.5000, 45917078.0000));
1726 
1728  record = stock.getKRecordByDate(Datetime(201112070000), KQuery::DAY);
1729  BOOST_CHECK(record == Null<KRecord>());
1730 
1734 
1736  record = stock.getKRecordByDate(Datetime(199012160000), KQuery::WEEK);
1737  BOOST_CHECK(record == Null<KRecord>());
1738 
1740  record = stock.getKRecordByDate(Datetime(199012170000), KQuery::WEEK);
1741  BOOST_CHECK(record == KRecord(Datetime(199012170000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000));
1742 
1744  record = stock.getKRecordByDate(Datetime(199103250000), KQuery::WEEK);
1745  BOOST_CHECK(record == KRecord(Datetime(199103250000), 122.1200, 122.6200, 120.1100, 120.1900, 409.0000, 5421.0000));
1746 
1748  record = stock.getKRecordByDate(Datetime(199103120000), KQuery::WEEK);
1749  BOOST_CHECK(record == Null<KRecord>());
1750 
1752  record = stock.getKRecordByDate(Datetime(201112050000), KQuery::WEEK);
1753  BOOST_CHECK(record == KRecord(Datetime(201112050000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
1754 
1756  record = stock.getKRecordByDate(Datetime(201112060000), KQuery::WEEK);
1757  BOOST_CHECK(record == Null<KRecord>());
1758 
1762 
1764  record = stock.getKRecordByDate(Datetime(199011300000), KQuery::MONTH);
1765  BOOST_CHECK(record == Null<KRecord>());
1766 
1768  record = stock.getKRecordByDate(Datetime(199012010000), KQuery::MONTH);
1769  BOOST_CHECK(record == KRecord(Datetime(199012010000), 96.0500, 127.6100, 95.7900, 127.6100, 93.6000, 1884.0000));
1770 
1772  record = stock.getKRecordByDate(Datetime(199208010000), KQuery::MONTH);
1773  BOOST_CHECK(record == KRecord(Datetime(199208010000), 1034.7000, 1060.3600, 627.3600, 823.2700, 286256.7000, 2040679.0000));
1774 
1776  record = stock.getKRecordByDate(Datetime(199103120000), KQuery::MONTH);
1777  BOOST_CHECK(record == Null<KRecord>());
1778 
1780  record = stock.getKRecordByDate(Datetime(201112010000), KQuery::MONTH);
1781  BOOST_CHECK(record == KRecord(Datetime(201112010000), 2392.4850, 2423.5590, 2310.1550, 2325.9050, 24378748.5000, 256650941.0000));
1782 
1784  record = stock.getKRecordByDate(Datetime(201112020000), KQuery::MONTH);
1785  BOOST_CHECK(record == Null<KRecord>());
1786 
1790 
1792  record = stock.getKRecordByDate(Datetime(200001040944), KQuery::MIN15);
1793  BOOST_CHECK(record == Null<KRecord>());
1794 
1796  record = stock.getKRecordByDate(Datetime(200001040945), KQuery::MIN15);
1797  BOOST_CHECK(record == KRecord(Datetime(200001040945), 1366.5800, 1369.6800, 1364.6450, 1364.7630, 250875.9000, 912990.0000));
1798 
1800  record = stock.getKRecordByDate(Datetime(200001071045), KQuery::MIN15);
1801  BOOST_CHECK(record == KRecord(Datetime(200001071045), 1482.5210, 1490.0070, 1481.9910, 1485.2770, 1030800.2000, 1663302.0000));
1802 
1804  record = stock.getKRecordByDate(Datetime(200001071044), KQuery::MIN15);
1805  BOOST_CHECK(record == Null<KRecord>());
1806 
1808  record = stock.getKRecordByDate(Datetime(201112061500), KQuery::MIN15);
1809  BOOST_CHECK(record == KRecord(Datetime(201112061500), 2323.0680, 2325.9310, 2320.8190, 2325.9050, 402339.3000, 4060591.0000));
1810 
1812  record = stock.getKRecordByDate(Datetime(201112061501), KQuery::MIN15);
1813  BOOST_CHECK(record == Null<KRecord>());
1814 }
1815