test_doc
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 
23 #define MEMORY_CHECK {Stock mem_stock = sm["sh000001"]; \
24  BOOST_CHECK(mem_stock.isBuffer(KQuery::DAY) == true);\
25  BOOST_CHECK(mem_stock.isBuffer(KQuery::WEEK) == false);\
26  BOOST_CHECK(mem_stock.isBuffer(KQuery::MONTH) == false);\
27  BOOST_CHECK(mem_stock.isBuffer(KQuery::QUARTER) == false);\
28  BOOST_CHECK(mem_stock.isBuffer(KQuery::HALFYEAR) == false);\
29  BOOST_CHECK(mem_stock.isBuffer(KQuery::YEAR) == false);\
30  BOOST_CHECK(mem_stock.isBuffer(KQuery::MIN) == false);\
31  BOOST_CHECK(mem_stock.isBuffer(KQuery::MIN5) == false);\
32  BOOST_CHECK(mem_stock.isBuffer(KQuery::MIN15) == false);\
33  BOOST_CHECK(mem_stock.isBuffer(KQuery::MIN30) == false);\
34  BOOST_CHECK(mem_stock.isBuffer(KQuery::MIN60) == false);\
35  }
36 
44 BOOST_AUTO_TEST_CASE( test_Stock_Relational_comparison ) {
45  StockManager& sm = StockManager::instance();
46  Stock s1;
47 
49  BOOST_CHECK(s1 == Null<Stock>());
50 
52  s1 = sm.getStock("sh000001");
53  BOOST_CHECK(s1 != Null<Stock>());
54 
56  Stock s2 = sm.getStock("sh000001");
57  BOOST_CHECK(s1 == s2);
58 
60  s2 = sm.getStock("sz000001");
61  BOOST_CHECK(s1 != s2);
62 
64 }
65 
67 BOOST_AUTO_TEST_CASE( test_Stock_getWeight ) {
68  StockManager& sm = StockManager::instance();
69 
70  Stock stock = sm.getStock("sz000001");
71  StockWeight weight;
72 
74  StockWeightList weightList = stock.getWeight();
75  BOOST_CHECK(weightList.size() == 23);
76  weight = weightList.front();
77  BOOST_CHECK(weight.datetime() == Datetime(199104030000L));
78  BOOST_CHECK(weight.countAsGift() == 0.0);
79  BOOST_CHECK(weight.countForSell() == 0.0);
80  BOOST_CHECK(weight.priceForSell() == 0.0);
81  BOOST_CHECK(weight.bonus() == 0.0);
82  BOOST_CHECK(weight.increasement() == 0.0);
83  BOOST_CHECK(weight.totalCount() == 150);
84  BOOST_CHECK(weight.freeCount() == 68);
85 
86  weight = weightList.back();
87  BOOST_CHECK(weight.datetime() == Datetime(201108050000L));
88  BOOST_CHECK(weight.countAsGift() == 0.0);
89  BOOST_CHECK(weight.countForSell() == 0.0);
90  BOOST_CHECK(weight.priceForSell() == 0.0);
91  BOOST_CHECK(weight.bonus() == 0.0);
92  BOOST_CHECK(weight.increasement() == 0.0);
93  BOOST_CHECK(weight.totalCount() == 512335);
94  BOOST_CHECK(weight.freeCount() == 310536);
95 
97  weightList = stock.getWeight(Datetime(199501010000),
98  Datetime(199701010000));
99  BOOST_CHECK(weightList.size() == 2);
100  weight = weightList.front();
101  BOOST_CHECK(weight.datetime() == Datetime(199509250000));
102  BOOST_CHECK(weight.countAsGift() == 2.0);
103  BOOST_CHECK(weight.countForSell() == 0.0);
104  BOOST_CHECK(weight.priceForSell() == 0.0);
105  BOOST_CHECK(weight.bonus() == 3.0);
106  BOOST_CHECK(weight.increasement() == 0.0);
107  BOOST_CHECK(weight.totalCount() == 51728);
108  BOOST_CHECK(weight.freeCount() == 35721);
109 
110  weight = weightList.back();
111  BOOST_CHECK(weight.datetime() == Datetime(199605270000));
112  BOOST_CHECK(weight.countAsGift() == 5.0);
113  BOOST_CHECK(weight.countForSell() == 0.0);
114  BOOST_CHECK(weight.priceForSell() == 0.0);
115  BOOST_CHECK(weight.bonus() == 0.0);
116  BOOST_CHECK(weight.increasement() == 5.0);
117  BOOST_CHECK(weight.totalCount() == 103456);
118  BOOST_CHECK(weight.freeCount() == 71393);
119 
121  weightList = stock.getWeight(Datetime(199509250000),
122  Datetime(199701010000));
123  BOOST_CHECK(weightList.size() == 2);
124  weight = weightList.front();
125  BOOST_CHECK(weight.datetime() == Datetime(199509250000));
126  BOOST_CHECK(weight.countAsGift() == 2.0);
127  BOOST_CHECK(weight.countForSell() == 0.0);
128  BOOST_CHECK(weight.priceForSell() == 0.0);
129  BOOST_CHECK(weight.bonus() == 3.0);
130  BOOST_CHECK(weight.increasement() == 0.0);
131  BOOST_CHECK(weight.totalCount() == 51728);
132  BOOST_CHECK(weight.freeCount() == 35721);
133 
134  weight = weightList.back();
135  BOOST_CHECK(weight.datetime() == Datetime(199605270000));
136  BOOST_CHECK(weight.countAsGift() == 5.0);
137  BOOST_CHECK(weight.countForSell() == 0.0);
138  BOOST_CHECK(weight.priceForSell() == 0.0);
139  BOOST_CHECK(weight.bonus() == 0.0);
140  BOOST_CHECK(weight.increasement() == 5.0);
141  BOOST_CHECK(weight.totalCount() == 103456);
142  BOOST_CHECK(weight.freeCount() == 71393);
143 
145  weightList = stock.getWeight(Datetime(199501010000),
146  Datetime(199605270000));
147  BOOST_CHECK(weightList.size() == 1);
148  weight = weightList.front();
149  BOOST_CHECK(weight.datetime() == Datetime(199509250000));
150  BOOST_CHECK(weight.countAsGift() == 2.0);
151  BOOST_CHECK(weight.countForSell() == 0.0);
152  BOOST_CHECK(weight.priceForSell() == 0.0);
153  BOOST_CHECK(weight.bonus() == 3.0);
154  BOOST_CHECK(weight.increasement() == 0.0);
155  BOOST_CHECK(weight.totalCount() == 51728);
156  BOOST_CHECK(weight.freeCount() == 35721);
157 
159  weightList = stock.getWeight(Datetime(201101010000), Null<Datetime>());
160  BOOST_CHECK(weightList.size() == 1);
161  weight = weightList.front();
162  BOOST_CHECK(weight.datetime() == Datetime(201108050000));
163  BOOST_CHECK(weight.countAsGift() == 0.0);
164  BOOST_CHECK(weight.countForSell() == 0.0);
165  BOOST_CHECK(weight.priceForSell() == 0.0);
166  BOOST_CHECK(weight.bonus() == 0.0);
167  BOOST_CHECK(weight.increasement() == 0.0);
168  BOOST_CHECK(weight.totalCount() == 512335);
169  BOOST_CHECK(weight.freeCount() == 310536);
170 
172  weightList = stock.getWeight(Datetime(201101010000));
173  BOOST_CHECK(weightList.size() == 1);
174  weight = weightList.front();
175  BOOST_CHECK(weight.datetime() == Datetime(201108050000));
176  BOOST_CHECK(weight.countAsGift() == 0.0);
177  BOOST_CHECK(weight.countForSell() == 0.0);
178  BOOST_CHECK(weight.priceForSell() == 0.0);
179  BOOST_CHECK(weight.bonus() == 0.0);
180  BOOST_CHECK(weight.increasement() == 0.0);
181  BOOST_CHECK(weight.totalCount() == 512335);
182  BOOST_CHECK(weight.freeCount() == 310536);
183 
184  MEMORY_CHECK;
185 }
186 
187 
189 BOOST_AUTO_TEST_CASE( test_Stock_getCount ) {
190  StockManager& sm = StockManager::instance();
191 
193  Stock stock = sm.getStock("sh000001");
194  BOOST_CHECK(stock.getCount(KQuery::DAY) == 5121);
195 
197  stock = sm.getStock("Sz000001");
198  BOOST_CHECK(stock.getCount(KQuery::DAY) == 4937);
199 
201  stock = sm.getStock("sh000001");
202  BOOST_CHECK(stock.getCount(KQuery::WEEK) == 1059);
203 
205  stock = sm.getStock("Sz000001");
206  BOOST_CHECK(stock.getCount(KQuery::WEEK) == 1037);
207 
209  stock = sm.getStock("sh000001");
210  BOOST_CHECK(stock.getCount(KQuery::MONTH) == 253);
211 
213  stock = sm.getStock("Sz000001");
214  BOOST_CHECK(stock.getCount(KQuery::MONTH) == 250);
215 
217  stock = sm.getStock("sh000001");
218  BOOST_CHECK(stock.getCount(KQuery::QUARTER) == 85);
219 
221  stock = sm.getStock("Sz000001");
222  BOOST_CHECK(stock.getCount(KQuery::QUARTER) == 84);
223 
225  stock = sm.getStock("sh000001");
226  BOOST_CHECK(stock.getCount(KQuery::HALFYEAR) == 43);
227 
229  stock = sm.getStock("Sz000001");
230  BOOST_CHECK(stock.getCount(KQuery::HALFYEAR) == 42);
231 
233  stock = sm.getStock("sh000001");
234  BOOST_CHECK(stock.getCount(KQuery::YEAR) == 22);
235 
237  stock = sm.getStock("Sz000001");
238  BOOST_CHECK(stock.getCount(KQuery::YEAR) == 21);
239 
241  stock = sm.getStock("sh000001");
242  BOOST_CHECK(stock.getCount(KQuery::MIN) == 682823L);
243 
245  stock = sm.getStock("Sz000001");
246  BOOST_CHECK(stock.getCount(KQuery::MIN) == 641091L);
247 
249  stock = sm.getStock("sh000001");
250  BOOST_CHECK(stock.getCount(KQuery::MIN5) == 133980L);
251 
253  stock = sm.getStock("Sz000001");
254  BOOST_CHECK(stock.getCount(KQuery::MIN5) == 126381L);
255 
257  stock = sm.getStock("sh000001");
258  BOOST_CHECK(stock.getCount(KQuery::MIN15) == 44750L);
259 
261  stock = sm.getStock("Sz000001");
262  BOOST_CHECK(stock.getCount(KQuery::MIN15) == 42195L);
263 
265  stock = sm.getStock("sh000001");
266  BOOST_CHECK(stock.getCount(KQuery::MIN30) == 22380L);
267 
269  stock = sm.getStock("Sz000001");
270  BOOST_CHECK(stock.getCount(KQuery::MIN30) == 21101L);
271 
273  stock = sm.getStock("sh000001");
274  BOOST_CHECK(stock.getCount(KQuery::MIN60) == 11193L);
275 
277  stock = sm.getStock("Sz000001");
278  BOOST_CHECK(stock.getCount(KQuery::MIN60) == 10553L);
279 
280  MEMORY_CHECK;
281 }
282 
283 
285 BOOST_AUTO_TEST_CASE( test_Stock_getKRecord ) {
286  StockManager& sm = StockManager::instance();
287  Stock stock = sm.getStock("sh000001");
288  KRecord record, expect;
289 
291  record = stock.getKRecord(0);
292  expect = KRecord(Datetime(199012190000), 96.05, 99.98, 95.79, 99.98, 49.4, 1260);
293  BOOST_CHECK(record == expect);
294 
296  record = stock.getKRecord(10);
297  expect = KRecord(Datetime(199101030000), 128.840, 130.14, 128.84, 130.140, 9.3, 141);
298  BOOST_CHECK(record == expect);
299 
301  size_t total = stock.getCount();
302  record = stock.getKRecord(total - 1);
303  expect = KRecord(Datetime(201112060000), 2326.66, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078);
304  BOOST_CHECK(record == expect);
305 
307  record = stock.getKRecord(0, KQuery::WEEK);
308  expect = KRecord(Datetime(199012210000), 96.05, 109.130, 95.790, 109.130, 59.4, 1485);
309  BOOST_CHECK(record == expect);
310 
312  record = stock.getKRecord(10, KQuery::WEEK);
313  expect = KRecord(Datetime(199103010000), 134.37, 134.87, 132.47, 132.53, 827.1, 11500);
314  BOOST_CHECK(record == expect);
315 
317  total = stock.getCount(KQuery::WEEK);
318  record = stock.getKRecord(total - 1, KQuery::WEEK);
319  expect = KRecord(Datetime(201112090000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048);
320  BOOST_CHECK(record == expect);
321 
323  record = stock.getKRecord(0, KQuery::MONTH);
324  expect = KRecord(Datetime(199012310000), 96.05, 127.610, 95.790, 127.610, 93.6, 1884);
325  BOOST_CHECK(record == expect);
326 
328  record = stock.getKRecord(10, KQuery::MONTH);
329  expect = KRecord(Datetime(199110310000), 181.550, 218.600, 179.800, 218.600, 14953.6, 223443);
330  BOOST_CHECK(record == expect);
331 
333  total = stock.getCount(KQuery::MONTH);
334  record = stock.getKRecord(total - 1, KQuery::MONTH);
335  expect = KRecord(Datetime(201112310000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941);
336  BOOST_CHECK(record == expect);
337 
339  record = stock.getKRecord(0, KQuery::QUARTER);
340  expect = KRecord(Datetime(199012310000), 96.05, 127.610, 95.790, 127.610, 93.6, 1884);
341  BOOST_CHECK(record == expect);
342 
344  record = stock.getKRecord(10, KQuery::QUARTER);
345  expect = KRecord(Datetime(199306300000), 921.590, 1392.620, 859.48, 1007.050, 5181883.5, 27631999);
346  BOOST_CHECK(record == expect);
347 
349  total = stock.getCount(KQuery::QUARTER);
350  record = stock.getKRecord(total - 1, KQuery::QUARTER);
351  expect = KRecord(Datetime(201112310000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936);
352  BOOST_CHECK(record == expect);
353 
355  record = stock.getKRecord(0, KQuery::HALFYEAR);
356  expect = KRecord(Datetime(199012310000), 96.05, 127.610, 95.790, 127.610, 93.6, 1884);
357  BOOST_CHECK(record == expect);
358 
360  record = stock.getKRecord(10, KQuery::HALFYEAR);
361  expect = KRecord(Datetime(199512310000), 623.140, 792.540, 552.840, 555.290, 18764625.6, 351276329);
362  BOOST_CHECK(record == expect);
363 
365  total = stock.getCount(KQuery::HALFYEAR);
366  record = stock.getKRecord(total - 1, KQuery::HALFYEAR);
367  expect = KRecord(Datetime(201112310000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694);
368  BOOST_CHECK(record == expect);
369 
371  record = stock.getKRecord(0, KQuery::YEAR);
372  expect = KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.61, 93.6, 1884);
373  BOOST_CHECK(record == expect);
374 
376  record = stock.getKRecord(10, KQuery::YEAR);
377  expect = KRecord(Datetime(200012310000), 1368.693, 2125.724, 1361.214, 2073.476, 326945832.5, 3433225623);
378  BOOST_CHECK(record == expect);
379 
381  total = stock.getCount(KQuery::YEAR);
382  record = stock.getKRecord(total - 1, KQuery::YEAR);
383  expect = KRecord(Datetime(201112310000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512);
384  BOOST_CHECK(record == expect);
385 
387  record = stock.getKRecord(0, KQuery::MIN);
388  expect = KRecord(Datetime("2000-1-4 9:31"), 1366.580, 1368.692, 1366.579, 1368.692, 4124880, 191158);
389  BOOST_CHECK(record == expect);
390 
392  record = stock.getKRecord(10, KQuery::MIN);
393  expect = KRecord(Datetime(200001040941), 1367.389, 1367.389, 1366.578, 1366.578, 1214910.4, 31811);
394  BOOST_CHECK(record == expect);
395 
397  total = stock.getCount(KQuery::MIN);
398  record = stock.getKRecord(total - 1, KQuery::MIN);
399  expect = KRecord(Datetime("2011-12-06 15:00"), 2325.380, 2326.1, 2324.6, 2325.9, 5215150, 566312);
400  BOOST_CHECK(record == expect);
401 
403  record = stock.getKRecord(0, KQuery::MIN5);
404  expect = KRecord(Datetime(200001040935), 1366.580, 1369.680, 1366.579, 1369.187, 106611.5, 438171);
405  BOOST_CHECK(record == expect);
406 
408  record = stock.getKRecord(10, KQuery::MIN5);
409  expect = KRecord(Datetime(200001041025), 1366.291, 1366.582, 1366.144, 1366.526, 89332, 118007);
410  BOOST_CHECK(record == expect);
411 
413  total = stock.getCount(KQuery::MIN5);
414  record = stock.getKRecord(total - 1, KQuery::MIN5);
415  expect = KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675);
416  BOOST_CHECK(record == expect);
417 
419  record = stock.getKRecord(0, KQuery::MIN15);
420  expect = KRecord(Datetime(200001040945), 1366.580, 1369.680, 1364.645, 1364.763, 250875.9, 912990);
421  BOOST_CHECK(record == expect);
422 
424  record = stock.getKRecord(10, KQuery::MIN15);
425  expect = KRecord(Datetime(200001041345), 1399.325, 1403.996, 1399.325, 1403.056, 441489.9, 547552);
426  BOOST_CHECK(record == expect);
427 
429  total = stock.getCount(KQuery::MIN15);
430  record = stock.getKRecord(total - 1, KQuery::MIN15);
431  expect = KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591);
432  BOOST_CHECK(record == expect);
433 
435  record = stock.getKRecord(0, KQuery::MIN30);
436  expect = KRecord(Datetime(200001041000), 1366.580, 1369.68, 1361.459, 1361.459, 455153, 1370442);
437  BOOST_CHECK(record == expect);
438 
440  record = stock.getKRecord(10, KQuery::MIN30);
441  expect = KRecord(Datetime(200001051100), 1421.179, 1425.868, 1421.179, 1423.859, 1109219.5, 1282851);
442  BOOST_CHECK(record == expect);
443 
445  total = stock.getCount(KQuery::MIN30);
446  record = stock.getKRecord(total - 1, KQuery::MIN30);
447  expect = KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054);
448  BOOST_CHECK(record == expect);
449 
451  record = stock.getKRecord(0, KQuery::MIN60);
452  expect = KRecord(Datetime(200001041030), 1366.580, 1369.68, 1361.295, 1367.683, 1041787.5, 2370736);
453  BOOST_CHECK(record == expect);
454 
456  record = stock.getKRecord(10, KQuery::MIN60);
457  expect = KRecord(Datetime(200001061400), 1411.490, 1436.53, 1411.49, 1436.53, 2432679.2, 3016536);
458  BOOST_CHECK(record == expect);
459 
461  total = stock.getCount(KQuery::MIN60);
462  record = stock.getKRecord(total - 1, KQuery::MIN60);
463  expect = KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356);
464  BOOST_CHECK(record == expect);
465 
466  MEMORY_CHECK;
467 }
468 
469 
471 BOOST_AUTO_TEST_CASE( test_Stock_getIndexRange ) {
472  StockManager& sm = StockManager::instance();
473  Stock stock;
474  KQuery query;
475  bool success;
476  size_t out_start, out_end;
477  stock = sm.getStock("sh000001");
478 
480  query = KQuery();
481  success = stock.getIndexRange(query, out_start, out_end);
482  BOOST_CHECK(success == true);
483  BOOST_CHECK(out_start == 0);
484  BOOST_CHECK(out_end == 5121);
485 
486  query = KQuery(0, Null<hku_int64>(), KQuery::WEEK);
487  success = stock.getIndexRange(query, out_start, out_end);
488  BOOST_CHECK(success == true);
489  BOOST_CHECK(out_start == 0);
490  BOOST_CHECK(out_end == 1059);
491 
492  query = KQuery(0, Null<hku_int64>(), KQuery::MONTH);
493  success = stock.getIndexRange(query, out_start, out_end);
494  BOOST_CHECK(success == true);
495  BOOST_CHECK(out_start == 0);
496  BOOST_CHECK(out_end == 253);
497 
498  query = KQuery(0, Null<hku_int64>(), KQuery::QUARTER);
499  success = stock.getIndexRange(query, out_start, out_end);
500  BOOST_CHECK(success == true);
501  BOOST_CHECK(out_start == 0);
502  BOOST_CHECK(out_end == 85);
503 
504  query = KQuery(0, Null<hku_int64>(), KQuery::HALFYEAR);
505  success = stock.getIndexRange(query, out_start, out_end);
506  BOOST_CHECK(success == true);
507  BOOST_CHECK(out_start == 0);
508  BOOST_CHECK(out_end == 43);
509 
510  query = KQuery(0, Null<hku_int64>(), KQuery::YEAR);
511  success = stock.getIndexRange(query, out_start, out_end);
512  BOOST_CHECK(success == true);
513  BOOST_CHECK(out_start == 0);
514  BOOST_CHECK(out_end == 22);
515 
516  query = KQuery(0, Null<hku_int64>(), KQuery::MIN);
517  success = stock.getIndexRange(query, out_start, out_end);
518  BOOST_CHECK(success == true);
519  BOOST_CHECK(out_start == 0);
520  BOOST_CHECK(out_end == 682823L);
521 
522  query = KQuery(0, Null<hku_int64>(), KQuery::MIN5);
523  success = stock.getIndexRange(query, out_start, out_end);
524  BOOST_CHECK(success == true);
525  BOOST_CHECK(out_start == 0);
526  BOOST_CHECK(out_end == 133980L);
527 
528  query = KQuery(0, Null<hku_int64>(), KQuery::MIN15);
529  success = stock.getIndexRange(query, out_start, out_end);
530  BOOST_CHECK(success == true);
531  BOOST_CHECK(out_start == 0);
532  BOOST_CHECK(out_end == 44750);
533 
534  query = KQuery(0, Null<hku_int64>(), KQuery::MIN30);
535  success = stock.getIndexRange(query, out_start, out_end);
536  BOOST_CHECK(success == true);
537  BOOST_CHECK(out_start == 0);
538  BOOST_CHECK(out_end == 22380L);
539 
540  query = KQuery(0, Null<hku_int64>(), KQuery::MIN60);
541  success = stock.getIndexRange(query, out_start, out_end);
542  BOOST_CHECK(success == true);
543  BOOST_CHECK(out_start == 0);
544  BOOST_CHECK(out_end == 11193);
545 
547  query = KQueryByDate();
548  success = stock.getIndexRange(query, out_start, out_end);
549  BOOST_CHECK(success == true);
550  BOOST_CHECK(out_start == 0);
551  BOOST_CHECK(out_end == 5121);
552 
553  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::WEEK);
554  success = stock.getIndexRange(query, out_start, out_end);
555  BOOST_CHECK(success == true);
556  BOOST_CHECK(out_start == 0);
557  BOOST_CHECK(out_end == 1059);
558 
559  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::MONTH);
560  success = stock.getIndexRange(query, out_start, out_end);
561  BOOST_CHECK(success == true);
562  BOOST_CHECK(out_start == 0);
563  BOOST_CHECK(out_end == 253);
564 
565  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::QUARTER);
566  success = stock.getIndexRange(query, out_start, out_end);
567  BOOST_CHECK(success == true);
568  BOOST_CHECK(out_start == 0);
569  BOOST_CHECK(out_end == 85);
570 
571  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::HALFYEAR);
572  success = stock.getIndexRange(query, out_start, out_end);
573  BOOST_CHECK(success == true);
574  BOOST_CHECK(out_start == 0);
575  BOOST_CHECK(out_end == 43);
576 
577  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::YEAR);
578  success = stock.getIndexRange(query, out_start, out_end);
579  BOOST_CHECK(success == true);
580  BOOST_CHECK(out_start == 0);
581  BOOST_CHECK(out_end == 22);
582 
583  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::MIN);
584  success = stock.getIndexRange(query, out_start, out_end);
585  BOOST_CHECK(success == true);
586  BOOST_CHECK(out_start == 0);
587  BOOST_CHECK(out_end == 682823L);
588 
589  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::MIN5);
590  success = stock.getIndexRange(query, out_start, out_end);
591  BOOST_CHECK(success == true);
592  BOOST_CHECK(out_start == 0);
593  BOOST_CHECK(out_end == 133980L);
594 
595  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::MIN15);
596  success = stock.getIndexRange(query, out_start, out_end);
597  BOOST_CHECK(success == true);
598  BOOST_CHECK(out_start == 0);
599  BOOST_CHECK(out_end == 44750);
600 
601  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::MIN30);
602  success = stock.getIndexRange(query, out_start, out_end);
603  BOOST_CHECK(success == true);
604  BOOST_CHECK(out_start == 0);
605  BOOST_CHECK(out_end == 22380L);
606 
607  query = KQueryByDate(Datetime::min(), Null<Datetime>(), KQuery::MIN60);
608  success = stock.getIndexRange(query, out_start, out_end);
609  BOOST_CHECK(success == true);
610  BOOST_CHECK(out_start == 0);
611  BOOST_CHECK(out_end == 11193);
612 
614  query = KQuery(168,165);
615  success = stock.getIndexRange(query, out_start, out_end);
616  BOOST_CHECK(success == false);
617  BOOST_CHECK(out_start == 0);
618  BOOST_CHECK(out_end == 0);
619 
620  query = KQuery(168,165, KQuery::WEEK);
621  success = stock.getIndexRange(query, out_start, out_end);
622  BOOST_CHECK(success == false);
623  BOOST_CHECK(out_start == 0);
624  BOOST_CHECK(out_end == 0);
625 
626  query = KQuery(168,165, KQuery::MONTH);
627  success = stock.getIndexRange(query, out_start, out_end);
628  BOOST_CHECK(success == false);
629  BOOST_CHECK(out_start == 0);
630  BOOST_CHECK(out_end == 0);
631 
632  query = KQuery(168,165, KQuery::QUARTER);
633  success = stock.getIndexRange(query, out_start, out_end);
634  BOOST_CHECK(success == false);
635  BOOST_CHECK(out_start == 0);
636  BOOST_CHECK(out_end == 0);
637 
638  query = KQuery(168,165, KQuery::HALFYEAR);
639  success = stock.getIndexRange(query, out_start, out_end);
640  BOOST_CHECK(success == false);
641  BOOST_CHECK(out_start == 0);
642  BOOST_CHECK(out_end == 0);
643 
644  query = KQuery(168,165, KQuery::YEAR);
645  success = stock.getIndexRange(query, out_start, out_end);
646  BOOST_CHECK(success == false);
647  BOOST_CHECK(out_start == 0);
648  BOOST_CHECK(out_end == 0);
649 
650  query = KQuery(168,165, KQuery::MIN);
651  success = stock.getIndexRange(query, out_start, out_end);
652  BOOST_CHECK(success == false);
653  BOOST_CHECK(out_start == 0);
654  BOOST_CHECK(out_end == 0);
655 
656  query = KQuery(168,165, KQuery::MIN5);
657  success = stock.getIndexRange(query, out_start, out_end);
658  BOOST_CHECK(success == false);
659  BOOST_CHECK(out_start == 0);
660  BOOST_CHECK(out_end == 0);
661 
662  query = KQuery(168,165, KQuery::MIN15);
663  success = stock.getIndexRange(query, out_start, out_end);
664  BOOST_CHECK(success == false);
665  BOOST_CHECK(out_start == 0);
666  BOOST_CHECK(out_end == 0);
667 
668  query = KQuery(168,165, KQuery::MIN30);
669  success = stock.getIndexRange(query, out_start, out_end);
670  BOOST_CHECK(success == false);
671  BOOST_CHECK(out_start == 0);
672  BOOST_CHECK(out_end == 0);
673 
674  query = KQuery(168,165, KQuery::MIN60);
675  success = stock.getIndexRange(query, out_start, out_end);
676  BOOST_CHECK(success == false);
677  BOOST_CHECK(out_start == 0);
678  BOOST_CHECK(out_end == 0);
679 
681  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000));
682  success = stock.getIndexRange(query, out_start, out_end);
683  BOOST_CHECK(success == false);
684  BOOST_CHECK(out_start == 0);
685  BOOST_CHECK(out_end == 0);
686 
687  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::WEEK);
688  success = stock.getIndexRange(query, out_start, out_end);
689  BOOST_CHECK(success == false);
690  BOOST_CHECK(out_start == 0);
691  BOOST_CHECK(out_end == 0);
692 
693  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MONTH);
694  success = stock.getIndexRange(query, out_start, out_end);
695  BOOST_CHECK(success == false);
696  BOOST_CHECK(out_start == 0);
697  BOOST_CHECK(out_end == 0);
698 
699  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::QUARTER);
700  success = stock.getIndexRange(query, out_start, out_end);
701  BOOST_CHECK(success == false);
702  BOOST_CHECK(out_start == 0);
703  BOOST_CHECK(out_end == 0);
704 
705  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::HALFYEAR);
706  success = stock.getIndexRange(query, out_start, out_end);
707  BOOST_CHECK(success == false);
708  BOOST_CHECK(out_start == 0);
709  BOOST_CHECK(out_end == 0);
710 
711  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::YEAR);
712  success = stock.getIndexRange(query, out_start, out_end);
713  BOOST_CHECK(success == false);
714  BOOST_CHECK(out_start == 0);
715  BOOST_CHECK(out_end == 0);
716 
717  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN);
718  success = stock.getIndexRange(query, out_start, out_end);
719  BOOST_CHECK(success == false);
720  BOOST_CHECK(out_start == 0);
721  BOOST_CHECK(out_end == 0);
722 
723  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN5);
724  success = stock.getIndexRange(query, out_start, out_end);
725  BOOST_CHECK(success == false);
726  BOOST_CHECK(out_start == 0);
727  BOOST_CHECK(out_end == 0);
728 
729  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN15);
730  success = stock.getIndexRange(query, out_start, out_end);
731  BOOST_CHECK(success == false);
732  BOOST_CHECK(out_start == 0);
733  BOOST_CHECK(out_end == 0);
734 
735  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN30);
736  success = stock.getIndexRange(query, out_start, out_end);
737  BOOST_CHECK(success == false);
738  BOOST_CHECK(out_start == 0);
739  BOOST_CHECK(out_end == 0);
740 
741  query = KQueryByDate(Datetime(200001010900), Datetime(200001010000), KQuery::MIN60);
742  success = stock.getIndexRange(query, out_start, out_end);
743  BOOST_CHECK(success == false);
744  BOOST_CHECK(out_start == 0);
745  BOOST_CHECK(out_end == 0);
746 
748  query = KQuery(165,165);
749  success = stock.getIndexRange(query, out_start, out_end);
750  BOOST_CHECK(success == false);
751  BOOST_CHECK(out_start == 0);
752  BOOST_CHECK(out_end == 0);
753 
754  query = KQuery(165,165, KQuery::WEEK);
755  success = stock.getIndexRange(query, out_start, out_end);
756  BOOST_CHECK(success == false);
757  BOOST_CHECK(out_start == 0);
758  BOOST_CHECK(out_end == 0);
759 
760  query = KQuery(165,165, KQuery::MONTH);
761  success = stock.getIndexRange(query, out_start, out_end);
762  BOOST_CHECK(success == false);
763  BOOST_CHECK(out_start == 0);
764  BOOST_CHECK(out_end == 0);
765 
766  query = KQuery(165,165, KQuery::QUARTER);
767  success = stock.getIndexRange(query, out_start, out_end);
768  BOOST_CHECK(success == false);
769  BOOST_CHECK(out_start == 0);
770  BOOST_CHECK(out_end == 0);
771 
772  query = KQuery(165,165, KQuery::HALFYEAR);
773  success = stock.getIndexRange(query, out_start, out_end);
774  BOOST_CHECK(success == false);
775  BOOST_CHECK(out_start == 0);
776  BOOST_CHECK(out_end == 0);
777 
778  query = KQuery(165,165, KQuery::YEAR);
779  success = stock.getIndexRange(query, out_start, out_end);
780  BOOST_CHECK(success == false);
781  BOOST_CHECK(out_start == 0);
782  BOOST_CHECK(out_end == 0);
783 
784  query = KQuery(165,165, KQuery::MIN);
785  success = stock.getIndexRange(query, out_start, out_end);
786  BOOST_CHECK(success == false);
787  BOOST_CHECK(out_start == 0);
788  BOOST_CHECK(out_end == 0);
789 
790  query = KQuery(165,165, KQuery::MIN5);
791  success = stock.getIndexRange(query, out_start, out_end);
792  BOOST_CHECK(success == false);
793  BOOST_CHECK(out_start == 0);
794  BOOST_CHECK(out_end == 0);
795 
796  query = KQuery(165,165, KQuery::MIN15);
797  success = stock.getIndexRange(query, out_start, out_end);
798  BOOST_CHECK(success == false);
799  BOOST_CHECK(out_start == 0);
800  BOOST_CHECK(out_end == 0);
801 
802  query = KQuery(165,165, KQuery::MIN30);
803  success = stock.getIndexRange(query, out_start, out_end);
804  BOOST_CHECK(success == false);
805  BOOST_CHECK(out_start == 0);
806  BOOST_CHECK(out_end == 0);
807 
808  query = KQuery(165,165, KQuery::MIN60);
809  success = stock.getIndexRange(query, out_start, out_end);
810  BOOST_CHECK(success == false);
811  BOOST_CHECK(out_start == 0);
812  BOOST_CHECK(out_end == 0);
813 
815  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000));
816  success = stock.getIndexRange(query, out_start, out_end);
817  BOOST_CHECK(success == false);
818  BOOST_CHECK(out_start == 0);
819  BOOST_CHECK(out_end == 0);
820 
821  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::WEEK);
822  success = stock.getIndexRange(query, out_start, out_end);
823  BOOST_CHECK(success == false);
824  BOOST_CHECK(out_start == 0);
825  BOOST_CHECK(out_end == 0);
826 
827  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MONTH);
828  success = stock.getIndexRange(query, out_start, out_end);
829  BOOST_CHECK(success == false);
830  BOOST_CHECK(out_start == 0);
831  BOOST_CHECK(out_end == 0);
832 
833  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::QUARTER);
834  success = stock.getIndexRange(query, out_start, out_end);
835  BOOST_CHECK(success == false);
836  BOOST_CHECK(out_start == 0);
837  BOOST_CHECK(out_end == 0);
838 
839  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::HALFYEAR);
840  success = stock.getIndexRange(query, out_start, out_end);
841  BOOST_CHECK(success == false);
842  BOOST_CHECK(out_start == 0);
843  BOOST_CHECK(out_end == 0);
844 
845  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::YEAR);
846  success = stock.getIndexRange(query, out_start, out_end);
847  BOOST_CHECK(success == false);
848  BOOST_CHECK(out_start == 0);
849  BOOST_CHECK(out_end == 0);
850 
851  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN);
852  success = stock.getIndexRange(query, out_start, out_end);
853  BOOST_CHECK(success == false);
854  BOOST_CHECK(out_start == 0);
855  BOOST_CHECK(out_end == 0);
856 
857  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN5);
858  success = stock.getIndexRange(query, out_start, out_end);
859  BOOST_CHECK(success == false);
860  BOOST_CHECK(out_start == 0);
861  BOOST_CHECK(out_end == 0);
862 
863  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN15);
864  success = stock.getIndexRange(query, out_start, out_end);
865  BOOST_CHECK(success == false);
866  BOOST_CHECK(out_start == 0);
867  BOOST_CHECK(out_end == 0);
868 
869  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN30);
870  success = stock.getIndexRange(query, out_start, out_end);
871  BOOST_CHECK(success == false);
872  BOOST_CHECK(out_start == 0);
873  BOOST_CHECK(out_end == 0);
874 
875  query = KQueryByDate(Datetime(200001010000), Datetime(200001010000), KQuery::MIN60);
876  success = stock.getIndexRange(query, out_start, out_end);
877  BOOST_CHECK(success == false);
878  BOOST_CHECK(out_start == 0);
879  BOOST_CHECK(out_end == 0);
880 
882  query = KQuery(1,10);
883  success = stock.getIndexRange(query, out_start, out_end);
884  BOOST_CHECK(success == true);
885  BOOST_CHECK(out_start == 1);
886  BOOST_CHECK(out_end == 10);
887 
888  query = KQuery(1,10, KQuery::WEEK);
889  success = stock.getIndexRange(query, out_start, out_end);
890  BOOST_CHECK(success == true);
891  BOOST_CHECK(out_start == 1);
892  BOOST_CHECK(out_end == 10);
893 
894  query = KQuery(1,10, KQuery::MONTH);
895  success = stock.getIndexRange(query, out_start, out_end);
896  BOOST_CHECK(success == true);
897  BOOST_CHECK(out_start == 1);
898  BOOST_CHECK(out_end == 10);
899 
900  query = KQuery(1,10, KQuery::QUARTER);
901  success = stock.getIndexRange(query, out_start, out_end);
902  BOOST_CHECK(success == true);
903  BOOST_CHECK(out_start == 1);
904  BOOST_CHECK(out_end == 10);
905 
906  query = KQuery(1,10, KQuery::HALFYEAR);
907  success = stock.getIndexRange(query, out_start, out_end);
908  BOOST_CHECK(success == true);
909  BOOST_CHECK(out_start == 1);
910  BOOST_CHECK(out_end == 10);
911 
912  query = KQuery(1,10, KQuery::YEAR);
913  success = stock.getIndexRange(query, out_start, out_end);
914  BOOST_CHECK(success == true);
915  BOOST_CHECK(out_start == 1);
916  BOOST_CHECK(out_end == 10);
917 
918  query = KQuery(1,10, KQuery::MIN);
919  success = stock.getIndexRange(query, out_start, out_end);
920  BOOST_CHECK(success == true);
921  BOOST_CHECK(out_start == 1);
922  BOOST_CHECK(out_end == 10);
923 
924  query = KQuery(1,10, KQuery::MIN5);
925  success = stock.getIndexRange(query, out_start, out_end);
926  BOOST_CHECK(success == true);
927  BOOST_CHECK(out_start == 1);
928  BOOST_CHECK(out_end == 10);
929 
930  query = KQuery(1,10, KQuery::MIN15);
931  success = stock.getIndexRange(query, out_start, out_end);
932  BOOST_CHECK(success == true);
933  BOOST_CHECK(out_start == 1);
934  BOOST_CHECK(out_end == 10);
935 
936  query = KQuery(1,10, KQuery::MIN30);
937  success = stock.getIndexRange(query, out_start, out_end);
938  BOOST_CHECK(success == true);
939  BOOST_CHECK(out_start == 1);
940  BOOST_CHECK(out_end == 10);
941 
942  query = KQuery(1,10, KQuery::MIN60);
943  success = stock.getIndexRange(query, out_start, out_end);
944  BOOST_CHECK(success == true);
945  BOOST_CHECK(out_start == 1);
946  BOOST_CHECK(out_end == 10);
947 
949  query = KQueryByDate(Datetime(199012200000), Datetime(199101030000));
950  success = stock.getIndexRange(query, out_start, out_end);
951  BOOST_CHECK(success == true);
952  BOOST_CHECK(out_start == 1);
953  BOOST_CHECK(out_end == 10);
954 
955  query = KQueryByDate(Datetime(199102250000), Datetime(199104290000), KQuery::WEEK);
956  success = stock.getIndexRange(query, out_start, out_end);
957  BOOST_CHECK(success == true);
958  BOOST_CHECK(out_start == 10);
959  BOOST_CHECK(out_end == 19);
960 
961  query = KQueryByDate(Datetime(199108010000), Datetime(199201010000), KQuery::MONTH);
962  success = stock.getIndexRange(query, out_start, out_end);
963  BOOST_CHECK(success == true);
964  BOOST_CHECK(out_start == 8);
965  BOOST_CHECK(out_end == 13);
966 
967  query = KQueryByDate(Datetime(199201010000), Datetime(199310010000), KQuery::QUARTER);
968  success = stock.getIndexRange(query, out_start, out_end);
969  BOOST_CHECK(success == true);
970  BOOST_CHECK(out_start == 5);
971  BOOST_CHECK(out_end == 12);
972 
973  query = KQueryByDate(Datetime(199401010000), Datetime(199801010000), KQuery::HALFYEAR);
974  success = stock.getIndexRange(query, out_start, out_end);
975  BOOST_CHECK(success == true);
976  BOOST_CHECK(out_start == 7);
977  BOOST_CHECK(out_end == 15);
978 
979  query = KQueryByDate(Datetime(199601010000), Datetime(200001010000), KQuery::YEAR);
980  success = stock.getIndexRange(query, out_start, out_end);
981  BOOST_CHECK(success == true);
982  BOOST_CHECK(out_start == 6);
983  BOOST_CHECK(out_end == 10);
984 
985  query = KQueryByDate(Datetime(200602171016), Datetime(200602171026), KQuery::MIN);
986  success = stock.getIndexRange(query, out_start, out_end);
987  BOOST_CHECK(success == true);
988  BOOST_CHECK(out_start == 343796L);
989  BOOST_CHECK(out_end == 343806L);
990 
991  query = KQueryByDate(Datetime(200001041025), Datetime(200001041100), KQuery::MIN5);
992  success = stock.getIndexRange(query, out_start, out_end);
993  BOOST_CHECK(success == true);
994  BOOST_CHECK(out_start == 10);
995  BOOST_CHECK(out_end == 17);
996 
997  query = KQueryByDate(Datetime(200001041415), Datetime(200001050945), KQuery::MIN15);
998  success = stock.getIndexRange(query, out_start, out_end);
999  BOOST_CHECK(success == true);
1000  BOOST_CHECK(out_start == 12);
1001  BOOST_CHECK(out_end == 16);
1002 
1003  query = KQueryByDate(Datetime(200001041330), Datetime(200001051500), KQuery::MIN30);
1004  success = stock.getIndexRange(query, out_start, out_end);
1005  BOOST_CHECK(success == true);
1006  BOOST_CHECK(out_start == 4);
1007  BOOST_CHECK(out_end == 15);
1008 
1009  query = KQueryByDate(Datetime(200001061400), Datetime(200001101130), KQuery::MIN60);
1010  success = stock.getIndexRange(query, out_start, out_end);
1011  BOOST_CHECK(success == true);
1012  BOOST_CHECK(out_start == 10);
1013  BOOST_CHECK(out_end == 17);
1014 
1016  query = KQueryByDate(Datetime(199012220000), Datetime(199101050000));
1017  success = stock.getIndexRange(query, out_start, out_end);
1018  BOOST_CHECK(success == true);
1019  BOOST_CHECK(out_start == 3);
1020  BOOST_CHECK(out_end == 12);
1021 
1022  query = KQueryByDate(Datetime(199102200000), Datetime(199104230000), KQuery::WEEK);
1023  success = stock.getIndexRange(query, out_start, out_end);
1024  BOOST_CHECK(success == true);
1025  BOOST_CHECK(out_start == 9);
1026  BOOST_CHECK(out_end == 18);
1027 
1028  query = KQueryByDate(Datetime(199107020000), Datetime(199112300000), KQuery::MONTH);
1029  success = stock.getIndexRange(query, out_start, out_end);
1030  BOOST_CHECK(success == true);
1031  BOOST_CHECK(out_start == 7);
1032  BOOST_CHECK(out_end == 12);
1033 
1034  query = KQueryByDate(Datetime(199112210000), Datetime(199308010000), KQuery::QUARTER);
1035  success = stock.getIndexRange(query, out_start, out_end);
1036  BOOST_CHECK(success == true);
1037  BOOST_CHECK(out_start == 4);
1038  BOOST_CHECK(out_end == 11);
1039 
1040  query = KQueryByDate(Datetime(199311010000), Datetime(199711010000), KQuery::HALFYEAR);
1041  success = stock.getIndexRange(query, out_start, out_end);
1042  BOOST_CHECK(success == true);
1043  BOOST_CHECK(out_start == 6);
1044  BOOST_CHECK(out_end == 14);
1045 
1046  query = KQueryByDate(Datetime(199502010000), Datetime(199912010000), KQuery::YEAR);
1047  success = stock.getIndexRange(query, out_start, out_end);
1048  BOOST_CHECK(success == true);
1049  BOOST_CHECK(out_start == 5);
1050  BOOST_CHECK(out_end == 9);
1051 
1052  query = KQueryByDate(Datetime(200602171016), Datetime(200602171026), KQuery::MIN);
1053  success = stock.getIndexRange(query, out_start, out_end);
1054  BOOST_CHECK(success == true);
1055  BOOST_CHECK(out_start == 343796L);
1056  BOOST_CHECK(out_end == 343806L);
1057 
1058  query = KQueryByDate(Datetime(200001041025), Datetime(200001041100), KQuery::MIN5);
1059  success = stock.getIndexRange(query, out_start, out_end);
1060  BOOST_CHECK(success == true);
1061  BOOST_CHECK(out_start == 10);
1062  BOOST_CHECK(out_end == 17);
1063 
1064  query = KQueryByDate(Datetime(200001041415), Datetime(200001050945), KQuery::MIN15);
1065  success = stock.getIndexRange(query, out_start, out_end);
1066  BOOST_CHECK(success == true);
1067  BOOST_CHECK(out_start == 12);
1068  BOOST_CHECK(out_end == 16);
1069 
1070  query = KQueryByDate(Datetime(200001041330), Datetime(200001051500), KQuery::MIN30);
1071  success = stock.getIndexRange(query, out_start, out_end);
1072  BOOST_CHECK(success == true);
1073  BOOST_CHECK(out_start == 4);
1074  BOOST_CHECK(out_end == 15);
1075 
1076  query = KQueryByDate(Datetime(200001061400), Datetime(200001101130), KQuery::MIN60);
1077  success = stock.getIndexRange(query, out_start, out_end);
1078  BOOST_CHECK(success == true);
1079  BOOST_CHECK(out_start == 10);
1080  BOOST_CHECK(out_end == 17);
1081 
1083  query = KQuery(-1,0);
1084  success = stock.getIndexRange(query, out_start, out_end);
1085  BOOST_CHECK(success == false);
1086  BOOST_CHECK(out_start == 0);
1087  BOOST_CHECK(out_end == 0);
1088 
1089  query = KQuery(0,-1);
1090  success = stock.getIndexRange(query, out_start, out_end);
1091  BOOST_CHECK(success == true);
1092  BOOST_CHECK(out_start == 0);
1093  BOOST_CHECK(out_end == 5120);
1094 
1095  query = KQuery(-1,-1);
1096  success = stock.getIndexRange(query, out_start, out_end);
1097  BOOST_CHECK(success == false);
1098  BOOST_CHECK(out_start == 0);
1099  BOOST_CHECK(out_end == 0);
1100 
1101  query = KQuery(-1, -2);
1102  success = stock.getIndexRange(query, out_start, out_end);
1103  BOOST_CHECK(success == false);
1104  BOOST_CHECK(out_start == 0);
1105  BOOST_CHECK(out_end == 0);
1106 
1107  query = KQuery(-2,-1);
1108  success = stock.getIndexRange(query, out_start, out_end);
1109  BOOST_CHECK(success == true);
1110  BOOST_CHECK(out_start == 5119);
1111  BOOST_CHECK(out_end == 5120);
1112 
1113  query = KQuery(-5120,-1);
1114  success = stock.getIndexRange(query, out_start, out_end);
1115  BOOST_CHECK(success == true);
1116  BOOST_CHECK(out_start == 1);
1117  BOOST_CHECK(out_end == 5120);
1118 
1119  MEMORY_CHECK;
1120 }
1121 
1122 
1124 BOOST_AUTO_TEST_CASE( test_Stock_getKRecordList ) {
1125  StockManager& sm = StockManager::instance();
1126  Stock stock = sm.getStock("sh000001");
1127  KRecordList result;
1128  KRecord record, expect;
1129  size_t total;
1130 
1131  MEMORY_CHECK;
1132 
1136 
1137  total = stock.getCount(KQuery::DAY);
1138  result = stock.getKRecordList(0, total, KQuery::DAY);
1139  BOOST_CHECK(result.size() == total);
1140  BOOST_CHECK(result[0] == KRecord(Datetime(199012190000), 96.050, 99.980, 95.790, 99.980, 49.4, 1260));
1141  BOOST_CHECK(result[10] == KRecord(Datetime(199101030000), 128.840, 130.140, 128.840, 130.140, 9.3, 141));
1142  BOOST_CHECK(result[5120] == KRecord(Datetime(201112060000), 2326.660, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078));
1143 
1145  result = stock.getKRecordList(0, total + 1, KQuery::DAY);
1146  BOOST_CHECK(result.size() == total);
1147  BOOST_CHECK(result[0] == KRecord(Datetime(199012190000), 96.050, 99.980, 95.790, 99.980, 49.4, 1260));
1148  BOOST_CHECK(result[10] == KRecord(Datetime(199101030000), 128.840, 130.140, 128.840, 130.140, 9.3, 141));
1149  BOOST_CHECK(result[5120] == KRecord(Datetime(201112060000), 2326.660, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078));
1150 
1152  result = stock.getKRecordList(1, 10, KQuery::DAY);
1153  BOOST_CHECK(result.size() == 9);
1154  BOOST_CHECK(result[0] == KRecord(Datetime(199012200000), 104.300, 104.390, 99.980, 104.390, 8.4, 197));
1155  BOOST_CHECK(result[1] == KRecord(Datetime(199012210000), 109.070, 109.130, 103.730, 109.130, 1.6, 28));
1156  BOOST_CHECK(result[8] == KRecord(Datetime(199101020000), 127.610, 128.840, 127.610, 128.840, 5.9, 91));
1157 
1159  result = stock.getKRecordList(0,0, KQuery::DAY);
1160  BOOST_CHECK(result.size() == 0);
1161 
1163  result = stock.getKRecordList(total, total, KQuery::DAY);
1164  BOOST_CHECK(result.size() == 0);
1165 
1167  result = stock.getKRecordList(2, 1, KQuery::DAY);
1168  BOOST_CHECK(result.size() == 0);
1169 
1171  result = stock.getKRecordList(0, 1, KQuery::DAY);
1172  BOOST_CHECK(result.size() == 1);
1173  BOOST_CHECK(result[0] == KRecord(Datetime(199012190000), 96.050, 99.980, 95.790, 99.980, 49.4, 1260));
1174 
1176  result = stock.getKRecordList(total - 1, total, KQuery::DAY);
1177  BOOST_CHECK(result.size() == 1);
1178  BOOST_CHECK(result[0] == KRecord(Datetime(201112060000), 2326.660, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078));
1179 
1181  result = stock.getKRecordList(total - 1, total + 1, KQuery::DAY);
1182  BOOST_CHECK(result.size() == 1);
1183  BOOST_CHECK(result[0] == KRecord(Datetime(201112060000), 2326.660, 2331.892, 2310.155, 2325.905, 4262559.5, 45917078));
1184 
1188 
1189  total = stock.getCount(KQuery::WEEK);
1190  result = stock.getKRecordList(0, total, KQuery::WEEK);
1191  BOOST_CHECK(result.size() == total);
1192  BOOST_CHECK(result[0] == KRecord(Datetime(199012210000), 96.05, 109.13, 95.79, 109.130, 59.4, 1485));
1193  BOOST_CHECK(result[1] == KRecord(Datetime(199012280000), 113.57, 126.45, 109.13, 126.450, 28.2, 321));
1194  BOOST_CHECK(result[1058] == KRecord(Datetime(201112090000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048));
1195 
1196 
1198  result = stock.getKRecordList(0, total + 1, KQuery::WEEK);
1199  BOOST_CHECK(result.size() == total);
1200  BOOST_CHECK(result[0] == KRecord(Datetime(199012210000), 96.05, 109.13, 95.79, 109.130, 59.4, 1485));
1201  BOOST_CHECK(result[1] == KRecord(Datetime(199012280000), 113.57, 126.45, 109.13, 126.450, 28.2, 321));
1202  BOOST_CHECK(result[1058] == KRecord(Datetime(201112090000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048));
1203 
1205  result = stock.getKRecordList(1, 10, KQuery::WEEK);
1206  BOOST_CHECK(result.size() == 9);
1207  BOOST_CHECK(result[0] == KRecord(Datetime(199012280000), 113.57, 126.45, 109.13, 126.450, 28.2, 321));
1208  BOOST_CHECK(result[1] == KRecord(Datetime(199101040000), 126.56, 131.44, 126.48, 131.440, 47.3, 730));
1209  BOOST_CHECK(result[8] == KRecord(Datetime(199102220000), 133.12, 134.87, 133.08, 134.870, 551, 9271));
1210 
1212  result = stock.getKRecordList(0,0, KQuery::WEEK);
1213  BOOST_CHECK(result.size() == 0);
1214 
1216  result = stock.getKRecordList(total, total, KQuery::WEEK);
1217  BOOST_CHECK(result.size() == 0);
1218 
1220  result = stock.getKRecordList(2, 1, KQuery::WEEK);
1221  BOOST_CHECK(result.size() == 0);
1222 
1224  result = stock.getKRecordList(0, 1, KQuery::WEEK);
1225  BOOST_CHECK(result.size() == 1);
1226  BOOST_CHECK(result[0] == KRecord(Datetime(199012210000), 96.05, 109.13, 95.79, 109.130, 59.4, 1485));
1227 
1229  result = stock.getKRecordList(total - 1, total, KQuery::WEEK);
1230  BOOST_CHECK(result.size() == 1);
1231  BOOST_CHECK(result[0] == KRecord(Datetime(201112090000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048));
1232 
1234  result = stock.getKRecordList(total - 1, total + 1, KQuery::WEEK);
1235  BOOST_CHECK(result.size() == 1);
1236  BOOST_CHECK(result[0] == KRecord(Datetime(201112090000), 2363.111, 2363.127, 2310.155, 2325.905, 9126681.1, 98132048));
1237 
1238 
1242 
1243  total = stock.getCount(KQuery::MONTH);
1244  result = stock.getKRecordList(0, total, KQuery::MONTH);
1245  BOOST_CHECK(result.size() == total);
1246  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1247  BOOST_CHECK(result[1] == KRecord(Datetime(199101310000), 127.61, 135.19, 127.61, 129.970, 3637.1, 67197));
1248  BOOST_CHECK(result[252] == KRecord(Datetime(201112310000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941));
1249 
1250 
1252  result = stock.getKRecordList(0, total + 1, KQuery::MONTH);
1253  BOOST_CHECK(result.size() == total);
1254  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1255  BOOST_CHECK(result[1] == KRecord(Datetime(199101310000), 127.61, 135.19, 127.61, 129.970, 3637.1, 67197));
1256  BOOST_CHECK(result[252] == KRecord(Datetime(201112310000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941));
1257 
1259  result = stock.getKRecordList(1, 10, KQuery::MONTH);
1260  BOOST_CHECK(result.size() == 9);
1261  BOOST_CHECK(result[0] == KRecord(Datetime(199101310000), 127.61, 135.19, 127.61, 129.970, 3637.1, 67197));
1262  BOOST_CHECK(result[1] == KRecord(Datetime(199102280000), 129.5, 134.87, 128.06, 133.010, 3027.3, 50982));
1263  BOOST_CHECK(result[8] == KRecord(Datetime(199109300000), 180.08, 191.18, 178.43, 180.920, 19410.4, 286133));
1264 
1266  result = stock.getKRecordList(0,0, KQuery::MONTH);
1267  BOOST_CHECK(result.size() == 0);
1268 
1270  result = stock.getKRecordList(total, total, KQuery::MONTH);
1271  BOOST_CHECK(result.size() == 0);
1272 
1274  result = stock.getKRecordList(2, 1, KQuery::MONTH);
1275  BOOST_CHECK(result.size() == 0);
1276 
1278  result = stock.getKRecordList(0, 1, KQuery::MONTH);
1279  BOOST_CHECK(result.size() == 1);
1280  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1281 
1283  result = stock.getKRecordList(total - 1, total, KQuery::MONTH);
1284  BOOST_CHECK(result.size() == 1);
1285  BOOST_CHECK(result[0] == KRecord(Datetime(201112310000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941));
1286 
1288  result = stock.getKRecordList(total - 1, total + 1, KQuery::MONTH);
1289  BOOST_CHECK(result.size() == 1);
1290  BOOST_CHECK(result[0] == KRecord(Datetime(201112310000), 2392.485, 2423.559, 2310.155, 2325.905, 24378748.5, 256650941));
1291 
1292 
1296 
1297  total = stock.getCount(KQuery::QUARTER);
1298  result = stock.getKRecordList(0, total, KQuery::QUARTER);
1299  BOOST_CHECK(result.size() == total);
1300  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1301  BOOST_CHECK(result[1] == KRecord(Datetime(199103310000), 127.61, 135.19, 120.11, 120.190, 8389.7, 142707));
1302  BOOST_CHECK(result[84] == KRecord(Datetime(201112310000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936));
1303 
1304 
1306  result = stock.getKRecordList(0, total + 1, KQuery::QUARTER);
1307  BOOST_CHECK(result.size() == total);
1308  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1309  BOOST_CHECK(result[1] == KRecord(Datetime(199103310000), 127.61, 135.19, 120.11, 120.190, 8389.7, 142707));
1310  BOOST_CHECK(result[84] == KRecord(Datetime(201112310000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936));
1311 
1313  result = stock.getKRecordList(1, 10, KQuery::QUARTER);
1314  BOOST_CHECK(result.size() == 9);
1315  BOOST_CHECK(result[0] == KRecord(Datetime(199103310000), 127.61, 135.19, 120.11, 120.190, 8389.7, 142707));
1316  BOOST_CHECK(result[1] == KRecord(Datetime(199106300000), 120.69, 137.56, 104.96, 137.560, 12095.6, 222753));
1317  BOOST_CHECK(result[8] == KRecord(Datetime(199303310000), 784.13, 1558.95, 777.16, 925.910, 5003866.3, 26182794));
1318 
1320  result = stock.getKRecordList(0,0, KQuery::QUARTER);
1321  BOOST_CHECK(result.size() == 0);
1322 
1324  result = stock.getKRecordList(total, total, KQuery::QUARTER);
1325  BOOST_CHECK(result.size() == 0);
1326 
1328  result = stock.getKRecordList(2, 1, KQuery::QUARTER);
1329  BOOST_CHECK(result.size() == 0);
1330 
1332  result = stock.getKRecordList(0, 1, KQuery::QUARTER);
1333  BOOST_CHECK(result.size() == 1);
1334  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1335 
1337  result = stock.getKRecordList(total - 1, total, KQuery::QUARTER);
1338  BOOST_CHECK(result.size() == 1);
1339  BOOST_CHECK(result[0] == KRecord(Datetime(201112310000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936));
1340 
1342  result = stock.getKRecordList(total - 1, total + 1, KQuery::QUARTER);
1343  BOOST_CHECK(result.size() == 1);
1344  BOOST_CHECK(result[0] == KRecord(Datetime(201112310000), 2363.078, 2536.779, 2307.146, 2325.905, 298278573.1, 3100147936));
1345 
1349 
1350  total = stock.getCount(KQuery::HALFYEAR);
1351  result = stock.getKRecordList(0, total, KQuery::HALFYEAR);
1352  BOOST_CHECK(result.size() == total);
1353  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1354  BOOST_CHECK(result[1] == KRecord(Datetime(199106300000), 127.61, 137.56, 104.96, 137.560, 20485.3, 365460));
1355  BOOST_CHECK(result[42] == KRecord(Datetime(201112310000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694));
1356 
1357 
1359  result = stock.getKRecordList(0, total + 1, KQuery::HALFYEAR);
1360  BOOST_CHECK(result.size() == total);
1361  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1362  BOOST_CHECK(result[1] == KRecord(Datetime(199106300000), 127.61, 137.56, 104.96, 137.560, 20485.3, 365460));
1363  BOOST_CHECK(result[42] == KRecord(Datetime(201112310000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694));
1364 
1366  result = stock.getKRecordList(1, 10, KQuery::HALFYEAR);
1367  BOOST_CHECK(result.size() == 9);
1368  BOOST_CHECK(result[0] == KRecord(Datetime(199106300000), 127.61, 137.56, 104.96, 137.560, 20485.3, 365460));
1369  BOOST_CHECK(result[1] == KRecord(Datetime(199112310000), 136.64, 292.75, 131.87, 292.750, 60078.8, 890458));
1370  BOOST_CHECK(result[8] == KRecord(Datetime(199506300000), 637.72, 926.41, 524.43, 630.580, 12294596.7, 164388191));
1371 
1373  result = stock.getKRecordList(0,0, KQuery::HALFYEAR);
1374  BOOST_CHECK(result.size() == 0);
1375 
1377  result = stock.getKRecordList(total, total, KQuery::HALFYEAR);
1378  BOOST_CHECK(result.size() == 0);
1379 
1381  result = stock.getKRecordList(2, 1, KQuery::HALFYEAR);
1382  BOOST_CHECK(result.size() == 0);
1383 
1385  result = stock.getKRecordList(0, 1, KQuery::HALFYEAR);
1386  BOOST_CHECK(result.size() == 1);
1387  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1388 
1390  result = stock.getKRecordList(total - 1, total, KQuery::HALFYEAR);
1391  BOOST_CHECK(result.size() == 1);
1392  BOOST_CHECK(result[0] == KRecord(Datetime(201112310000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694));
1393 
1395  result = stock.getKRecordList(total - 1, total + 1, KQuery::HALFYEAR);
1396  BOOST_CHECK(result.size() == 1);
1397  BOOST_CHECK(result[0] == KRecord(Datetime(201112310000), 2767.834, 2826.959, 2307.146, 2325.905, 842271699.6, 8187717694));
1398 
1399 
1403 
1404  total = stock.getCount(KQuery::YEAR);
1405  result = stock.getKRecordList(0, total, KQuery::YEAR);
1406  BOOST_CHECK(result.size() == total);
1407  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1408  BOOST_CHECK(result[1] == KRecord(Datetime(199112310000), 127.61, 292.75, 104.96, 292.750, 80564.1, 1255918));
1409  BOOST_CHECK(result[21] == KRecord(Datetime(201112310000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512));
1410 
1411 
1413  result = stock.getKRecordList(0, total + 1, KQuery::YEAR);
1414  BOOST_CHECK(result.size() == total);
1415  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1416  BOOST_CHECK(result[1] == KRecord(Datetime(199112310000), 127.61, 292.75, 104.96, 292.750, 80564.1, 1255918));
1417  BOOST_CHECK(result[21] == KRecord(Datetime(201112310000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512));
1418 
1420  result = stock.getKRecordList(1, 10, KQuery::YEAR);
1421  BOOST_CHECK(result.size() == 9);
1422  BOOST_CHECK(result[0] == KRecord(Datetime(199112310000), 127.61, 292.75, 104.96, 292.750, 80564.1, 1255918));
1423  BOOST_CHECK(result[1] == KRecord(Datetime(199212310000), 293.74, 1429.01, 292.76, 780.390, 2497452.9, 18170898));
1424  BOOST_CHECK(result[8] == KRecord(Datetime(199912310000), 1144.888, 1756.184, 1047.833, 1366.580, 181932093.8, 2287638100));
1425 
1427  result = stock.getKRecordList(0,0, KQuery::YEAR);
1428  BOOST_CHECK(result.size() == 0);
1429 
1431  result = stock.getKRecordList(total, total, KQuery::YEAR);
1432  BOOST_CHECK(result.size() == 0);
1433 
1435  result = stock.getKRecordList(2, 1, KQuery::YEAR);
1436  BOOST_CHECK(result.size() == 0);
1437 
1439  result = stock.getKRecordList(0, 1, KQuery::YEAR);
1440  BOOST_CHECK(result.size() == 1);
1441  BOOST_CHECK(result[0] == KRecord(Datetime(199012310000), 96.05, 127.61, 95.79, 127.610, 93.6, 1884));
1442 
1444  result = stock.getKRecordList(total - 1, total, KQuery::YEAR);
1445  BOOST_CHECK(result.size() == 1);
1446  BOOST_CHECK(result[0] == KRecord(Datetime(201112310000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512));
1447 
1449  result = stock.getKRecordList(total - 1, total + 1, KQuery::YEAR);
1450  BOOST_CHECK(result.size() == 1);
1451  BOOST_CHECK(result[0] == KRecord(Datetime(201112310000), 2825.329, 3067.456, 2307.146, 2325.905, 2308389935.3, 21513978512));
1452 
1453 
1457 
1458  total = stock.getCount(KQuery::MIN);
1459  result = stock.getKRecordList(0, total, KQuery::MIN);
1460  BOOST_CHECK(result.size() == total);
1461  BOOST_CHECK(result[0] == KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158));
1462  BOOST_CHECK(result[1] == KRecord(Datetime(200001040932), 1368.3, 1368.491, 1368.3, 1368.491, 2783200, 106916));
1463  BOOST_CHECK(result[682822] == KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.900, 5215150, 566312));
1464 
1465 
1467  result = stock.getKRecordList(0, total + 1, KQuery::MIN);
1468  BOOST_CHECK(result.size() == total);
1469  BOOST_CHECK(result[0] == KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158));
1470  BOOST_CHECK(result[1] == KRecord(Datetime(200001040932), 1368.3, 1368.491, 1368.3, 1368.491, 2783200, 106916));
1471  BOOST_CHECK(result[682822] == KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.900, 5215150, 566312));
1472 
1474  result = stock.getKRecordList(1, 10, KQuery::MIN);
1475  BOOST_CHECK(result.size() == 9);
1476  BOOST_CHECK(result[0] == KRecord(Datetime(200001040932), 1368.3, 1368.491, 1368.3, 1368.491, 2783200, 106916));
1477  BOOST_CHECK(result[1] == KRecord(Datetime(200001040933), 1368.859, 1369.474, 1368.859, 1369.308, 1060260, 37789));
1478  BOOST_CHECK(result[8] == KRecord(Datetime(200001040940), 1367.651, 1367.662, 1367.389, 1367.389, 1335200, 41924));
1479 
1481  result = stock.getKRecordList(0,0, KQuery::MIN);
1482  BOOST_CHECK(result.size() == 0);
1483 
1485  result = stock.getKRecordList(total, total, KQuery::MIN);
1486  BOOST_CHECK(result.size() == 0);
1487 
1489  result = stock.getKRecordList(2, 1, KQuery::MIN);
1490  BOOST_CHECK(result.size() == 0);
1491 
1493  result = stock.getKRecordList(0, 1, KQuery::MIN);
1494  BOOST_CHECK(result.size() == 1);
1495  BOOST_CHECK(result[0] == KRecord(Datetime(200001040931), 1366.58, 1368.692, 1366.579, 1368.692, 4124880, 191158));
1496 
1498  result = stock.getKRecordList(total - 1, total, KQuery::MIN);
1499  BOOST_CHECK(result.size() == 1);
1500  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.900, 5215150, 566312));
1501 
1503  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN);
1504  BOOST_CHECK(result.size() == 1);
1505  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2325.38, 2326.1, 2324.6, 2325.900, 5215150, 566312));
1506 
1507 
1511 
1512  total = stock.getCount(KQuery::MIN5);
1513  result = stock.getKRecordList(0, total, KQuery::MIN5);
1514  BOOST_CHECK(result.size() == total);
1515  BOOST_CHECK(result[0] == KRecord(Datetime(200001040935), 1366.58, 1369.68, 1366.579, 1369.187, 106611.5, 438171));
1516  BOOST_CHECK(result[1] == KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389, 70687.3, 251473));
1517  BOOST_CHECK(result[133979] == KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675));
1518 
1519 
1521  result = stock.getKRecordList(0, total + 1, KQuery::MIN5);
1522  BOOST_CHECK(result.size() == total);
1523  BOOST_CHECK(result[0] == KRecord(Datetime(200001040935), 1366.58, 1369.68, 1366.579, 1369.187, 106611.5, 438171));
1524  BOOST_CHECK(result[1] == KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389, 70687.3, 251473));
1525  BOOST_CHECK(result[133979] == KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675));
1526 
1528  result = stock.getKRecordList(1, 10, KQuery::MIN5);
1529  BOOST_CHECK(result.size() == 9);
1530  BOOST_CHECK(result[0] == KRecord(Datetime(200001040940), 1369.187, 1369.371, 1367.389, 1367.389, 70687.3, 251473));
1531  BOOST_CHECK(result[1] == KRecord(Datetime(200001040945), 1367.389, 1367.389, 1364.645, 1364.763, 73577.1, 223346));
1532  BOOST_CHECK(result[8] == KRecord(Datetime(200001041020), 1366.043, 1366.458, 1365.946, 1366.458, 111601.7, 205190));
1533 
1535  result = stock.getKRecordList(0,0, KQuery::MIN5);
1536  BOOST_CHECK(result.size() == 0);
1537 
1539  result = stock.getKRecordList(total, total, KQuery::MIN5);
1540  BOOST_CHECK(result.size() == 0);
1541 
1543  result = stock.getKRecordList(2, 1, KQuery::MIN5);
1544  BOOST_CHECK(result.size() == 0);
1545 
1547  result = stock.getKRecordList(0, 1, KQuery::MIN5);
1548  BOOST_CHECK(result.size() == 1);
1549  BOOST_CHECK(result[0] == KRecord(Datetime(200001040935), 1366.58, 1369.68, 1366.579, 1369.187, 106611.5, 438171));
1550 
1552  result = stock.getKRecordList(total - 1, total, KQuery::MIN5);
1553  BOOST_CHECK(result.size() == 1);
1554  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675));
1555 
1557  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN5);
1558  BOOST_CHECK(result.size() == 1);
1559  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2323.059, 2325.931, 2323.059, 2325.905, 176347.1, 1873675));
1560 
1564 
1565  total = stock.getCount(KQuery::MIN15);
1566  result = stock.getKRecordList(0, total, KQuery::MIN15);
1567  BOOST_CHECK(result.size() == total);
1568  BOOST_CHECK(result[0] == KRecord(Datetime(200001040945), 1366.58, 1369.68, 1364.645, 1364.763, 250875.9, 912990));
1569  BOOST_CHECK(result[1] == KRecord(Datetime(200001041000), 1364.763, 1364.763, 1361.459, 1361.459, 204277.1, 457452));
1570  BOOST_CHECK(result[44749] == KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591));
1571 
1572 
1574  result = stock.getKRecordList(0, total + 1, KQuery::MIN15);
1575  BOOST_CHECK(result.size() == total);
1576  BOOST_CHECK(result[0] == KRecord(Datetime(200001040945), 1366.58, 1369.68, 1364.645, 1364.763, 250875.9, 912990));
1577  BOOST_CHECK(result[1] == KRecord(Datetime(200001041000), 1364.763, 1364.763, 1361.459, 1361.459, 204277.1, 457452));
1578  BOOST_CHECK(result[44749] == KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591));
1579 
1581  result = stock.getKRecordList(1, 10, KQuery::MIN15);
1582  BOOST_CHECK(result.size() == 9);
1583  BOOST_CHECK(result[0] == KRecord(Datetime(200001041000), 1364.763, 1364.763, 1361.459, 1361.459, 204277.1, 457452));
1584  BOOST_CHECK(result[1] == KRecord(Datetime(200001041015), 1361.558, 1366.093, 1361.295, 1365.927, 307531.8, 548313));
1585  BOOST_CHECK(result[8] == KRecord(Datetime(200001041330), 1399.56, 1399.664, 1396.679, 1399.325, 407799.9, 554965));
1586 
1588  result = stock.getKRecordList(0,0, KQuery::MIN15);
1589  BOOST_CHECK(result.size() == 0);
1590 
1592  result = stock.getKRecordList(total, total, KQuery::MIN15);
1593  BOOST_CHECK(result.size() == 0);
1594 
1596  result = stock.getKRecordList(2, 1, KQuery::MIN15);
1597  BOOST_CHECK(result.size() == 0);
1598 
1600  result = stock.getKRecordList(0, 1, KQuery::MIN15);
1601  BOOST_CHECK(result.size() == 1);
1602  BOOST_CHECK(result[0] == KRecord(Datetime(200001040945), 1366.58, 1369.68, 1364.645, 1364.763, 250875.9, 912990));
1603 
1605  result = stock.getKRecordList(total - 1, total, KQuery::MIN15);
1606  BOOST_CHECK(result.size() == 1);
1607  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591));
1608 
1610  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN15);
1611  BOOST_CHECK(result.size() == 1);
1612  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2323.068, 2325.931, 2320.819, 2325.905, 402339.3, 4060591));
1613 
1614 
1618 
1619  total = stock.getCount(KQuery::MIN30);
1620  result = stock.getKRecordList(0, total, KQuery::MIN30);
1621  BOOST_CHECK(result.size() == total);
1622  BOOST_CHECK(result[0] == KRecord(Datetime(200001041000), 1366.58, 1369.68, 1361.459, 1361.459, 455153, 1370442));
1623  BOOST_CHECK(result[1] == KRecord(Datetime(200001041030), 1361.558, 1367.683, 1361.295, 1367.683, 586634.5, 1000294));
1624  BOOST_CHECK(result[22379] == KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054));
1625 
1626 
1628  result = stock.getKRecordList(0, total + 1, KQuery::MIN30);
1629  BOOST_CHECK(result.size() == total);
1630  BOOST_CHECK(result[0] == KRecord(Datetime(200001041000), 1366.58, 1369.68, 1361.459, 1361.459, 455153, 1370442));
1631  BOOST_CHECK(result[1] == KRecord(Datetime(200001041030), 1361.558, 1367.683, 1361.295, 1367.683, 586634.5, 1000294));
1632  BOOST_CHECK(result[22379] == KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054));
1633 
1635  result = stock.getKRecordList(1, 10, KQuery::MIN30);
1636  BOOST_CHECK(result.size() == 9);
1637  BOOST_CHECK(result[0] == KRecord(Datetime(200001041030), 1361.558, 1367.683, 1361.295, 1367.683, 586634.5, 1000294));
1638  BOOST_CHECK(result[1] == KRecord(Datetime(200001041100), 1367.667, 1378.543, 1367.6, 1377.098, 622250.5, 1248350));
1639  BOOST_CHECK(result[8] == KRecord(Datetime(200001051030), 1409.486, 1421.612, 1409.486, 1421.139, 1397089.8, 1777404));
1640 
1642  result = stock.getKRecordList(0,0, KQuery::MIN30);
1643  BOOST_CHECK(result.size() == 0);
1644 
1646  result = stock.getKRecordList(total, total, KQuery::MIN30);
1647  BOOST_CHECK(result.size() == 0);
1648 
1650  result = stock.getKRecordList(2, 1, KQuery::MIN30);
1651  BOOST_CHECK(result.size() == 0);
1652 
1654  result = stock.getKRecordList(0, 1, KQuery::MIN30);
1655  BOOST_CHECK(result.size() == 1);
1656  BOOST_CHECK(result[0] == KRecord(Datetime(200001041000), 1366.58, 1369.68, 1361.459, 1361.459, 455153, 1370442));
1657 
1659  result = stock.getKRecordList(total - 1, total, KQuery::MIN30);
1660  BOOST_CHECK(result.size() == 1);
1661  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054));
1662 
1664  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN30);
1665  BOOST_CHECK(result.size() == 1);
1666  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2327.919, 2327.919, 2320.819, 2325.905, 660297.5, 6415054));
1667 
1668 
1672 
1673  total = stock.getCount(KQuery::MIN60);
1674  result = stock.getKRecordList(0, total, KQuery::MIN60);
1675  BOOST_CHECK(result.size() == total);
1676  BOOST_CHECK(result[0] == KRecord(Datetime(200001041030), 1366.58, 1369.68, 1361.295, 1367.683, 1041787.5, 2370736));
1677  BOOST_CHECK(result[1] == KRecord(Datetime(200001041130), 1367.667, 1387.853, 1367.6, 1387.853, 1411191.4, 2172479));
1678  BOOST_CHECK(result[11192] == KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356));
1679 
1680 
1682  result = stock.getKRecordList(0, total + 1, KQuery::MIN60);
1683  BOOST_CHECK(result.size() == total);
1684  BOOST_CHECK(result[0] == KRecord(Datetime(200001041030), 1366.58, 1369.68, 1361.295, 1367.683, 1041787.5, 2370736));
1685  BOOST_CHECK(result[1] == KRecord(Datetime(200001041130), 1367.667, 1387.853, 1367.6, 1387.853, 1411191.4, 2172479));
1686  BOOST_CHECK(result[11192] == KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356));
1687 
1689  result = stock.getKRecordList(1, 10, KQuery::MIN60);
1690  BOOST_CHECK(result.size() == 9);
1691  BOOST_CHECK(result[0] == KRecord(Datetime(200001041130), 1367.667, 1387.853, 1367.6, 1387.853, 1411191.4, 2172479));
1692  BOOST_CHECK(result[1] == KRecord(Datetime(200001041400), 1389.996, 1403.996, 1389.97, 1400.685, 1740709.6, 2348753));
1693  BOOST_CHECK(result[8] == KRecord(Datetime(200001061130), 1420.098, 1420.098, 1410.706, 1411.387, 1291509.5, 1378193));
1694 
1696  result = stock.getKRecordList(0,0, KQuery::MIN60);
1697  BOOST_CHECK(result.size() == 0);
1698 
1700  result = stock.getKRecordList(total, total, KQuery::MIN60);
1701  BOOST_CHECK(result.size() == 0);
1702 
1704  result = stock.getKRecordList(2, 1, KQuery::MIN60);
1705  BOOST_CHECK(result.size() == 0);
1706 
1708  result = stock.getKRecordList(0, 1, KQuery::MIN60);
1709  BOOST_CHECK(result.size() == 1);
1710  BOOST_CHECK(result[0] == KRecord(Datetime(200001041030), 1366.58, 1369.68, 1361.295, 1367.683, 1041787.5, 2370736));
1711 
1713  result = stock.getKRecordList(total - 1, total, KQuery::MIN60);
1714  BOOST_CHECK(result.size() == 1);
1715  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356));
1716 
1718  result = stock.getKRecordList(total - 1, total + 1, KQuery::MIN60);
1719  BOOST_CHECK(result.size() == 1);
1720  BOOST_CHECK(result[0] == KRecord(Datetime(201112061500), 2326.036, 2331.378, 2320.819, 2325.905, 1332210, 11886356));
1721 
1722  MEMORY_CHECK;
1723 }
1724 
1725 
1727 BOOST_AUTO_TEST_CASE( test_Stock_getKRecordByDate ) {
1728  StockManager& sm = StockManager::instance();
1729  Stock stock = sm.getStock("sh000001");
1730  KRecord record;
1731 
1734 
1736  record = stock.getKRecordByDate(Datetime(199012180000), KQuery::DAY);
1737  BOOST_CHECK(record == Null<KRecord>());
1738 
1740  record = stock.getKRecordByDate(Datetime(199012190000), KQuery::DAY);
1741  BOOST_CHECK(record == KRecord(Datetime(199012190000), 96.0500, 99.9800, 95.7900, 99.9800, 49.4000, 1260.0000));
1742 
1744  record = stock.getKRecordByDate(Datetime(199502150000), KQuery::DAY);
1745  BOOST_CHECK(record == KRecord(Datetime(199502150000), 547.8300, 548.5900, 542.5000, 542.8400, 11889.3000, 232116.0000));
1746 
1748  record = stock.getKRecordByDate(Datetime(199502180000), KQuery::DAY);
1749  BOOST_CHECK(record == Null<KRecord>());
1750 
1752  record = stock.getKRecordByDate(Datetime(201112060000), KQuery::DAY);
1753  BOOST_CHECK(record == KRecord(Datetime(201112060000), 2326.6600, 2331.8920, 2310.1550, 2325.9050, 4262559.5000, 45917078.0000));
1754 
1756  record = stock.getKRecordByDate(Datetime(201112070000), KQuery::DAY);
1757  BOOST_CHECK(record == Null<KRecord>());
1758 
1762 
1764  record = stock.getKRecordByDate(Datetime(199012160000), KQuery::WEEK);
1765  BOOST_CHECK(record == Null<KRecord>());
1766 
1768  record = stock.getKRecordByDate(Datetime(199012210000), KQuery::WEEK);
1769  BOOST_CHECK(record == KRecord(Datetime(199012210000), 96.0500, 109.1300, 95.7900, 109.1300, 59.4000, 1485.0000));
1770 
1772  record = stock.getKRecordByDate(Datetime(199103290000), KQuery::WEEK);
1773  BOOST_CHECK(record == KRecord(Datetime(199103290000), 122.1200, 122.6200, 120.1100, 120.1900, 409.0000, 5421.0000));
1774 
1776  record = stock.getKRecordByDate(Datetime(199103120000), KQuery::WEEK);
1777  BOOST_CHECK(record == Null<KRecord>());
1778 
1780  record = stock.getKRecordByDate(Datetime(201112090000), KQuery::WEEK);
1781  BOOST_CHECK(record == KRecord(Datetime(201112090000), 2363.1110, 2363.1270, 2310.1550, 2325.9050, 9126681.1000, 98132048.0000));
1782 
1784  record = stock.getKRecordByDate(Datetime(201112100000), KQuery::WEEK);
1785  BOOST_CHECK(record == Null<KRecord>());
1786 
1790 
1792  record = stock.getKRecordByDate(Datetime(199011300000), KQuery::MONTH);
1793  BOOST_CHECK(record == Null<KRecord>());
1794 
1796  record = stock.getKRecordByDate(Datetime(199012310000), KQuery::MONTH);
1797  BOOST_CHECK(record == KRecord(Datetime(199012310000), 96.0500, 127.6100, 95.7900, 127.6100, 93.6000, 1884.0000));
1798 
1800  record = stock.getKRecordByDate(Datetime(199208310000), KQuery::MONTH);
1801  BOOST_CHECK(record == KRecord(Datetime(199208310000), 1034.7000, 1060.3600, 627.3600, 823.2700, 286256.7000, 2040679.0000));
1802 
1804  record = stock.getKRecordByDate(Datetime(199103120000), KQuery::MONTH);
1805  BOOST_CHECK(record == Null<KRecord>());
1806 
1808  record = stock.getKRecordByDate(Datetime(201112310000), KQuery::MONTH);
1809  BOOST_CHECK(record == KRecord(Datetime(201112310000), 2392.4850, 2423.5590, 2310.1550, 2325.9050, 24378748.5000, 256650941.0000));
1810 
1812  record = stock.getKRecordByDate(Datetime(201201010000), KQuery::MONTH);
1813  BOOST_CHECK(record == Null<KRecord>());
1814 
1818 
1820  record = stock.getKRecordByDate(Datetime(200001040944), KQuery::MIN15);
1821  BOOST_CHECK(record == Null<KRecord>());
1822 
1824  record = stock.getKRecordByDate(Datetime(200001040945), KQuery::MIN15);
1825  BOOST_CHECK(record == KRecord(Datetime(200001040945), 1366.5800, 1369.6800, 1364.6450, 1364.7630, 250875.9000, 912990.0000));
1826 
1828  record = stock.getKRecordByDate(Datetime(200001071045), KQuery::MIN15);
1829  BOOST_CHECK(record == KRecord(Datetime(200001071045), 1482.5210, 1490.0070, 1481.9910, 1485.2770, 1030800.2000, 1663302.0000));
1830 
1832  record = stock.getKRecordByDate(Datetime(200001071044), KQuery::MIN15);
1833  BOOST_CHECK(record == Null<KRecord>());
1834 
1836  record = stock.getKRecordByDate(Datetime(201112061500), KQuery::MIN15);
1837  BOOST_CHECK(record == KRecord(Datetime(201112061500), 2323.0680, 2325.9310, 2320.8190, 2325.9050, 402339.3000, 4060591.0000));
1838 
1840  record = stock.getKRecordByDate(Datetime(201112061501), KQuery::MIN15);
1841  BOOST_CHECK(record == Null<KRecord>());
1842 
1843  MEMORY_CHECK;
1844 }
1845 
1846 
1848 BOOST_AUTO_TEST_CASE( test_Stock_getMarketValue ) {
1849  StockManager& sm = StockManager::instance();
1850  Stock stock;
1851  price_t result = 0.0;
1852 
1854  result = stock.getMarketValue(Datetime::now(), KQuery::DAY);
1855  BOOST_CHECK(result == 0.0);
1856 
1858  stock = sm.getStock("sh600000");
1859  result = stock.getMarketValue(Datetime::now(), KQuery::DAY);
1860  BOOST_CHECK(result == 8.73);
1861 
1862  result = stock.getMarketValue(Datetime(201112010000), KQuery::DAY);
1863  BOOST_CHECK(result == 8.81);
1864 
1865  result = stock.getMarketValue(Datetime(201112020000), KQuery::DAY);
1866  BOOST_CHECK(result == 8.80);
1867 
1868  result = stock.getMarketValue(Datetime(201112030000), KQuery::DAY);
1869  BOOST_CHECK(result == 8.80);
1870 
1871  result = stock.getMarketValue(Datetime(201112040000), KQuery::DAY);
1872  BOOST_CHECK(result == 8.80);
1873 
1874  result = stock.getMarketValue(Datetime(201112050000), KQuery::DAY);
1875  BOOST_CHECK(result == 8.80);
1876 
1877  result = stock.getMarketValue(Datetime(201112060000), KQuery::DAY);
1878  BOOST_CHECK(result == 8.73);
1879 
1881  result = stock.getMarketValue(Datetime::now(), KQuery::MIN5);
1882  BOOST_CHECK(result == 8.73);
1883 
1884  result = stock.getMarketValue(Datetime(201111211344), KQuery::MIN5);
1885  BOOST_CHECK(std::fabs(result - 8.70) < 0.001);
1886 
1887  result = stock.getMarketValue(Datetime(201111211345), KQuery::MIN5);
1888  BOOST_CHECK(result == 8.71);
1889 
1890  result = stock.getMarketValue(Datetime(201111211346), KQuery::MIN5);
1891  BOOST_CHECK(result == 8.71);
1892 
1893  result = stock.getMarketValue(Datetime(201111211350), KQuery::MIN5);
1894  BOOST_CHECK(std::fabs(result - 8.70) < 0.001);
1895 
1896  MEMORY_CHECK;
1897 }
1898 
1899 
1901 BOOST_AUTO_TEST_CASE( test_Stock_id_map ) {
1903  Stock x1, x2;
1904  BOOST_CHECK(x1.id() == x2.id());
1905 
1907  StockManager& sm = StockManager::instance();
1908  x1 = sm.getStock("sh600001");
1909  x2 = sm.getStock("sh600001");
1910  BOOST_CHECK(x1.id() == x2.id());
1911 
1913  map<Stock, int> dict;
1914  Stock x3 = sm.getStock("sh600000");
1915  Stock x4 = x1;
1916  dict[Stock()] = 0;
1917  dict[x1] = 1;
1918  dict[x3] = 3;
1919  BOOST_CHECK(dict.count(x1) != 0);
1920  BOOST_CHECK(dict.count(x2) != 0);
1921  BOOST_CHECK(dict.count(x3) != 0);
1922  BOOST_CHECK(dict[x1] == 1);
1923  BOOST_CHECK(dict[x2] == 1);
1924  BOOST_CHECK(dict[Stock()] == 0);
1925  BOOST_CHECK(dict[x3] == 3);
1926  BOOST_CHECK(dict[x4] == 1);
1927 
1928  MEMORY_CHECK;
1929 }
1930 
#define MEMORY_CHECK
Definition: test_Stock.cpp:23
BOOST_AUTO_TEST_CASE(test_Stock_Relational_comparison)
Definition: test_Stock.cpp:44