00001
00012 #include <iostream>
00013 #include <stack>
00014 #include <algorithm>
00015 #include <vector>
00016
00017 #include <algorithm>
00018 #include <typeinfo>
00019
00020 #include <boost/bind.hpp>
00021 #include <boost/foreach.hpp>
00022 #include <boost/multi_array.hpp>
00023
00024 #include <boost/regex.hpp>
00025
00026 #include <ql/utilities/tracing.hpp>
00027
00028
00029
00030
00031 #include "eleve/src/scal0.hpp"
00032
00033 #include <boost/algorithm/string/trim.hpp>
00034 #include <boost/tokenizer.hpp>
00035
00036 #include "eleve/src/loader0.hpp"
00037
00038 #include "eleve/src/typing3.hpp"
00039 #include "eleve/src/typing1.hpp"
00040 #include "eleve/src0/csv1.hpp"
00041
00042 #include "acsvt0.hpp"
00043
00044
00045
00046 #include "eleve/src/types0.cpp"
00047
00048 BOOST_AUTO_TEST_SUITE(header0)
00049
00050
00051
00052
00053
00054
00055
00056 BOOST_AUTO_TEST_CASE(ab0)
00057 {
00058 using namespace eepgwde::detail;
00059 using namespace std;
00060
00061 BOOST_TEST_MESSAGE("QuantLib::price::header0::ab0");
00062
00063 std::string service0(fname0);
00064 service0 = service0.erase(service0.find("."));
00065
00066 DataFrame df(frame, service0);
00067
00068 df.render();
00069
00070 std::cerr << df.frame << std::endl;
00071
00072 DataFrame::r_itr ti =
00073 df.header.right.find(std::string("PX"));
00074
00075 BOOST_CHECK( ti != df.header.right.end() );
00076
00077 BOOST_CHECK( df.header.left.size() > 0 );
00078 std::cerr << df.header.left << std::endl;
00079
00080 std::string tag("PX");
00081 DataFrame::column_t col = df.column(tag);
00082 BOOST_CHECK( col.size() > 0 );
00083
00084 std::vector<std::string> a = DataFrame::columnar(col);
00085
00086 BOOST_CHECK(distance(a.begin(), a.end()) > 0);
00087
00088 copy(a.begin(), a.end(), ostream_iterator<std::string>(std::cerr, " "));
00089
00090 }
00091
00092
00093
00094 BOOST_AUTO_TEST_CASE(ab1)
00095 {
00096 using namespace eepgwde::detail;
00097 using namespace std;
00098
00099 BOOST_TEST_MESSAGE("QuantLib::price::header0::ab1");
00100
00101 std::string service0(fname0);
00102 service0 = service0.erase(service0.find("."));
00103
00104 DataFrame df(frame, service0);
00105
00106 df.render();
00107
00108 std::cerr << df.frame << std::endl;
00109
00110 std::string tag0("PX_LAST");
00111
00112 DataFrame::attr_pos_t::right_map::iterator
00113 ri = df.header.right.find(tag0);
00114 std::cerr << (*ri).second << std::endl;
00115
00116 std::string tag = std::string("price");
00117 bool is = df.header.right.replace_key( ri, tag);
00118
00119 BOOST_CHECK( df.header.left.size() > 0 );
00120 std::cerr << df.header.left << std::endl;
00121
00122 DataFrame::column_t col = df.column(tag);
00123
00124 std::vector<double> a = DataFrame::columnar(col);
00125
00126 copy(a.begin(), a.end(), ostream_iterator<double>(std::cerr, " "));
00127 std::cerr << std::endl;
00128
00129 DataFrame::iterator0 ii = df.payload->begin();
00130 record_t r0 = DataFrame::rowar(&df, ++ii);
00131
00132 std::cerr << "tag: " << tag << " " << as(*r0[tag]) << std::endl;
00133
00134 }
00135
00136 BOOST_AUTO_TEST_CASE(ab2)
00137 {
00138 using namespace eepgwde::detail;
00139 using namespace std;
00140
00141 BOOST_TEST_MESSAGE("QuantLib::price::header0::ab2");
00142
00143 std::string service0(fname0);
00144 service0 = service0.erase(service0.find("."));
00145
00146 DataFrame df(frame, service0);
00147
00148 df.render();
00149
00150 std::cerr << df.frame << std::endl;
00151
00152 Typing t0;
00153 t0.mappings(bbg_mappings);
00154
00155 Typing::mappings_t mappings0 = t0.mappings();
00156 for(Typing::mappings_t::const_iterator i = mappings0.begin();
00157 i != mappings0.end(); ++i) {
00158 std::cerr << i->first << " " << i->second << std::endl;
00159 }
00160
00161
00162 DataFrame::headar h0(&df, mappings0);
00163 DataFrame::attr_pos_t h1 = h0;
00164
00165 BOOST_CHECK( h1.size() > 0 );
00166
00167 std::cerr << h1.left << std::endl;
00168 df.header = h1;
00169
00170
00171 std::string tag = std::string("price");
00172 DataFrame::column_t col = df.column(tag);
00173 std::vector<double> a = DataFrame::columnar(col);
00174
00175
00176 copy(a.begin(), a.end(), ostream_iterator<double>(std::cerr, " "));
00177 std::cerr << std::endl;
00178
00179
00180 DataFrame::iterator0 ii = df.payload->begin();
00181 record_t r0 = DataFrame::rowar(&df, ++ii);
00182
00183 std::cerr << "tag: " << tag << " " << as(*r0[tag]) << std::endl;
00184
00185 }
00186
00187 BOOST_AUTO_TEST_SUITE_END()
00188
00189 #include <boost/regex.hpp>
00190
00191 BOOST_AUTO_TEST_SUITE(attrs)
00192
00193 using namespace eepgwde::detail;
00194
00195
00196 void print_captures(const std::string& regx, const std::string& text)
00197 {
00198 boost::regex e(regx);
00199 boost::smatch what;
00200 std::cerr << "Expression: \"" << regx << "\"\n";
00201 std::cerr << "Text: \"" << text << "\"\n";
00202 if(boost::regex_match(text, what, e, boost::match_extra))
00203 {
00204 unsigned i, j;
00205 std::cerr << "** Match found **\n Sub-Expressions:\n";
00206 for(i = 0; i < what.size(); ++i)
00207 std::cerr << " $" << i << " = \"" << what[i] << "\"\n";
00208 std::cerr << " Captures:\n";
00209 for(i = 0; i < what.size(); ++i)
00210 {
00211 std::cerr << " $" << i << " = {";
00212 for(j = 0; j < what.captures(i).size(); ++j)
00213 {
00214 if(j)
00215 std::cerr << ", ";
00216 else
00217 std::cerr << " ";
00218 std::cerr << "\"" << what.captures(i)[j] << "\"";
00219 }
00220 std::cerr << " }\n";
00221 }
00222 }
00223 else
00224 {
00225 std::cout << "** No Match found **\n";
00226 }
00227 }
00228
00229 struct Attr0 : public DataFrame::Record {
00230 Attr0(DataFrame *df,
00231 DataFrame::iterator0 itr,
00232 eepgwde::detail::record_t r) : DataFrame::Record(df, itr, r) {}
00233
00234 void attributes(const std::string & key0) {
00235 boost::any o = *r_[key0];
00236 std::string text = eepgwde::detail::as(o);
00237 std::string regx(".+ ([0-9.-]+)%[ ]+([0-9]+)Y$");
00238
00239 boost::regex e(regx);
00240 boost::smatch what;
00241 if (boost::regex_match(text, what, e)) {
00242 attrs0_.push_back(boost::any(static_cast<std::string>(what[1])));
00243 attrs0_.push_back(boost::any(static_cast<std::string>(what[2])));
00244 std::list<boost::any>::iterator a = attrs0_.begin();
00245 attrs_["strike"] = & * a;
00246 attrs_["maturity"] = & * (++a);
00247 }
00248 }
00249
00250 void show() {
00251 if (! attrs_.size() > 0)
00252 return;
00253 if (attrs_.find("strike") == attrs_.end())
00254 return;
00255 if (attrs_.find("maturity") == attrs_.end())
00256 return;
00257
00258 boost::any o = * attrs_["strike"];
00259 boost::any o1 = * attrs_["maturity"];
00260 std::cerr
00261 << eepgwde::detail::as(o) << " "
00262 << eepgwde::detail::as(o1)
00263 << std::endl;
00264 }
00265
00266 };
00267
00268 struct Collector {
00269 std::set<std::string> names;
00270
00271 void collect(const record_t * r) {
00272 for(record_t::const_iterator i=r->begin();
00273 i != r->end(); ++i) {
00274 names.insert(i->first);
00275 }
00276 }
00277 };
00278
00279 BOOST_AUTO_TEST_CASE(q0)
00280 {
00281 BOOST_TEST_MESSAGE("QuantLib::price::attrs::q0");
00282
00283 std::string service0(fname0);
00284 service0 = service0.erase(service0.find("."));
00285
00286 DataFrame df(frame, service0);
00287
00288 DataFrame::payloader payload0(df);
00289 std::vector<Attr0> attr0 = payload0;
00290
00291 BOOST_CHECK(attr0.size() > 0);
00292
00293 std::string key("X0");
00294 for_each(attr0.begin(), attr0.end(),
00295 boost::bind(&Attr0::attributes,_1,key) );
00296
00297 for_each(attr0.begin(), attr0.end(),
00298 boost::bind(&Attr0::show,_1) );
00299
00300 std::list<record_t *> attrs;
00301 back_insert_iterator< std::list<record_t *> > ii(attrs);
00302 transform(attr0.begin(), attr0.end(),
00303 ii,
00304 boost::bind(&Attr0::attrs,_1));
00305
00306 Collector c;
00307 for_each(attrs.begin(), attrs.end(),
00308 boost::bind(&Collector::collect,boost::ref(c),_1));
00309
00310 copy(c.names.begin(), c.names.end(),
00311 ostream_iterator<std::string>(std::cerr, " "));
00312 std::cerr << std::endl ;
00313
00314 std::vector<DataFrame::Record *> s =
00315 pointerize<std::vector<DataFrame::Record *>, std::vector<Attr0> >(attr0);
00316
00317 DataFrame::ma_any_t xframe;
00318 df.add(&xframe, s, c.names);
00319 std::cerr << xframe << std::endl;
00320
00321 DataFrame::ma_any_t xframe1;
00322 df.add(&xframe1, s);
00323 std::cerr << xframe1 << std::endl;
00324
00325 }
00326
00327
00328
00329 BOOST_AUTO_TEST_CASE(q1)
00330 {
00331 BOOST_TEST_MESSAGE("QuantLib::price::attrs::q1");
00332
00333 std::string service0(fname0);
00334 service0 = service0.erase(service0.find("."));
00335
00336 DataFrame df0(frame, service0);
00337
00338 DataFrame::ma_any_t frame0;
00339
00340 std::cerr << frame0.shape()[0] << std::endl;
00341 std::cerr << frame0.shape()[1] << std::endl;
00342
00343 DataFrame::payload_t a =
00344 frame0[ boost::indices[DataFrame::range()][DataFrame::range()] ];
00345
00346
00347
00348 DataFrame df(frame0);
00349 BOOST_CHECK( df.frame.shape()[0] == 0 && df.frame.shape()[1] == 0 );
00350
00351
00352 df = df0;
00353 BOOST_CHECK( df.frame.shape()[0] == df0.frame.shape()[0] &&
00354 df.frame.shape()[1] == df0.frame.shape()[1] );
00355
00356 std::cerr << df.frame << std::endl;
00357 }
00358
00359 BOOST_AUTO_TEST_SUITE_END()
00360
00361 BOOST_AUTO_TEST_SUITE(sort0)
00362
00363 namespace {
00364 using namespace eepgwde::detail;
00365 using namespace std;
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376 struct Sort0 : public DataFrame::Record {
00377 Sort0(DataFrame *df,
00378 DataFrame::iterator0 itr,
00379 eepgwde::detail::record_t r) : DataFrame::Record(df, itr, r) {}
00380
00381 #ifndef NDEBUG
00382
00383 int maturity3() const {
00384 std::string key("X2");
00385 boost::any o = *(r_)[key];
00386 int r0;
00387 std::cerr << * eepgwde::detail::as<int>(&r0, o) << std::endl;
00388 return 0;
00389 }
00390 #endif
00391
00392 };
00393
00394
00395
00396
00397 struct Sort1 {
00398 const std::string strike;
00399 const std::string maturity;
00400
00401 bool t1(const std::string & k) {
00402 return false;
00403 }
00404
00405 template <typename T>
00406 T r(const DataFrame::Record & z, const std::string & k0) const {
00407 T x = *eepgwde::detail::as(&x, *(z.r_[k0]) );
00408 return x;
00409 }
00410
00411 Sort1() : strike("X1"), maturity("X2") {}
00412
00413 bool less(const DataFrame::Record & a_,
00414 const DataFrame::Record & b_)
00415 const {
00416 return ( r<double>(a_, strike) < r<double>(b_, strike)
00417 &&
00418 r<int>(a_, maturity) < r<int>(b_, maturity) );
00419 }
00420 };
00421
00422 }
00423
00424
00425
00426 BOOST_AUTO_TEST_CASE(b3)
00427 {
00428 using namespace eepgwde::detail;
00429
00430 BOOST_TEST_MESSAGE("QuantLib::price::sort0::b3");
00431
00432 std::string service0(fname0);
00433 service0 = service0.erase(service0.find("."));
00434
00435 DataFrame df(frame, service0);
00436
00437 df.render();
00438
00439 DataFrame::payloader payload0(df);
00440 std::vector<DataFrame::iterator0> a = payload0;
00441
00442 for(std::vector<DataFrame::iterator0>::iterator
00443 i = a.begin(); i != a.end(); ++i) {
00444
00445 }
00446
00447 std::cerr << frame << std::endl;
00448
00449 }
00450
00451
00452
00453
00454
00455
00456 BOOST_AUTO_TEST_CASE(b4)
00457 {
00458 using namespace eepgwde::detail;
00459
00460 BOOST_TEST_MESSAGE("QuantLib::price::sort0::b4");
00461
00462 std::string service0(fname0);
00463 service0 = service0.erase(service0.find("."));
00464
00465 DataFrame df(frame, service0);
00466
00467 df.render();
00468
00469 std::string key("X2");
00470
00471 DataFrame::payloader payload0(df);
00472 std::vector<Sort0> sort0 = payload0;
00473
00474 BOOST_CHECK(sort0.size() > 0);
00475
00476 sort(sort0.begin(), sort0.end(),
00477 boost::bind(std::less<int>(),
00478 boost::bind(&Sort0::as<int>,_1, key),
00479 boost::bind(&Sort0::as<int>,_2, key) ));
00480
00481 DataFrame::ma_any_t sorted0 = payload0.as(sort0);
00482
00483 std::cerr << sorted0 << std::endl;
00484
00485 }
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499 BOOST_AUTO_TEST_CASE(b5)
00500 {
00501 using namespace eepgwde::detail;
00502
00503 BOOST_TEST_MESSAGE("QuantLib::price::sort0::b5");
00504
00505 std::string service0(fname0);
00506 service0 = service0.erase(service0.find("."));
00507
00508 DataFrame df(frame, service0);
00509
00510 df.render();
00511
00512 DataFrame::payloader payload0(df);
00513 std::vector<DataFrame::Record> sort0 = payload0;
00514
00515 BOOST_CHECK(sort0.size() > 0);
00516
00517 std::string strike("X1");
00518 std::string maturity("X2");
00519
00520
00521 sort(sort0.begin(), sort0.end(),
00522 boost::bind(std::less<int>(),
00523 boost::bind(&DataFrame::Record::as<int>,_1, maturity),
00524 boost::bind(&DataFrame::Record::as<int>,_2, maturity) ));
00525
00526
00527 stable_sort(sort0.begin(), sort0.end(),
00528 boost::bind(std::less<double>(),
00529 boost::bind(&DataFrame::Record::as<double>,_1, strike),
00530 boost::bind(&DataFrame::Record::as<double>,_2, strike) ));
00531
00532 DataFrame::ma_any_t sorted0 = payload0.as(sort0);
00533
00534 std::cerr << sorted0 << std::endl;
00535
00536 }
00537
00538
00539
00540
00541
00542 BOOST_AUTO_TEST_CASE(b6)
00543 {
00544 using namespace eepgwde::detail;
00545
00546 BOOST_TEST_MESSAGE("QuantLib::price::sort0::b6");
00547
00548 std::string service0(fname0);
00549 service0 = service0.erase(service0.find("."));
00550
00551 DataFrame df(frame, service0);
00552
00553 df.render();
00554
00555 Typing t0;
00556 Typing::mappings_t mappings0 = t0.mappings();
00557 mappings0["PX"] = "name";
00558
00559
00560 DataFrame::headar h0(&df, mappings0);
00561 DataFrame::attr_pos_t h1 = h0;
00562 df.header = h1;
00563
00564 DataFrame::payloader payload0(df);
00565 std::vector<DataFrame::Record> sort0 = payload0;
00566
00567 BOOST_CHECK(sort0.size() > 0);
00568
00569 boost::regex e("[A-Z]+ISC[^ ]+ Cu.+");
00570 QPXisc comparor(e);
00571
00572
00573 std::vector<DataFrame::Record>::iterator caps =
00574 partition(sort0.begin(), sort0.end(),
00575 boost::bind(&QPXisc::compare,boost::ref(comparor),_1) );
00576
00577 std::vector<DataFrame::Record>::iterator caps0 = sort0.begin();
00578 if (caps != sort0.end() && caps != sort0.begin() ) {
00579 caps0 = caps;
00580 }
00581
00582 std::string strike("X1");
00583 std::string maturity("X2");
00584
00585
00586
00587
00588 sort(sort0.begin(), caps0,
00589 boost::bind(std::less<int>(),
00590 boost::bind(&DataFrame::Record::as<int>,_1, maturity),
00591 boost::bind(&DataFrame::Record::as<int>,_2, maturity) ));
00592
00593
00594 stable_sort(sort0.begin(), caps0,
00595 boost::bind(std::less<double>(),
00596 boost::bind(&DataFrame::Record::as<double>,_1, strike),
00597 boost::bind(&DataFrame::Record::as<double>,_2, strike) ));
00598
00599 {
00600 DataFrame::ma_any_t sorted0 = payload0.as(sort0.begin(), caps0);
00601
00602 std::cerr << sorted0 << std::endl;
00603 }
00604
00605
00606
00607
00608 sort(caps, sort0.end(),
00609 boost::bind(std::less<int>(),
00610 boost::bind(&DataFrame::Record::as<int>,_1, maturity),
00611 boost::bind(&DataFrame::Record::as<int>,_2, maturity) ));
00612
00613
00614 stable_sort(caps, sort0.end(),
00615 boost::bind(std::less<double>(),
00616 boost::bind(&DataFrame::Record::as<double>,_1, strike),
00617 boost::bind(&DataFrame::Record::as<double>,_2, strike) ));
00618
00619 {
00620 DataFrame::ma_any_t sorted0 = payload0.as(caps, sort0.end());
00621
00622 std::cerr << sorted0 << std::endl;
00623 }
00624
00625 }
00626
00627
00628
00629
00630
00631 BOOST_AUTO_TEST_CASE(b7)
00632 {
00633 using namespace eepgwde::detail;
00634
00635 BOOST_TEST_MESSAGE("QuantLib::price::sort0::b7");
00636
00637 std::string service0(fname0);
00638 service0 = service0.erase(service0.find("."));
00639
00640 DataFrame df(frame, service0);
00641
00642 df.render();
00643
00644 Typing t0;
00645 Typing::mappings_t mappings0 = t0.mappings();
00646 mappings0["PX"] = "name";
00647
00648
00649 DataFrame::headar h0(&df, mappings0);
00650 DataFrame::attr_pos_t h1 = h0;
00651 df.header = h1;
00652
00653 DataFrame::payloader payload0(df);
00654 std::vector<DataFrame::Record> sort0 = payload0;
00655
00656 BOOST_CHECK(sort0.size() > 0);
00657
00658 boost::regex e("[A-Z]+ISC[^ ]+ Cu.+");
00659 QPXisc comparor(e);
00660
00661
00662 std::vector<DataFrame::Record>::iterator caps =
00663 partition(sort0.begin(), sort0.end(),
00664 boost::bind(&QPXisc::compare,boost::ref(comparor),_1) );
00665
00666 std::vector<DataFrame::Record>::iterator caps0 = sort0.begin();
00667 if (caps != sort0.end() && caps != sort0.begin() ) {
00668 caps0 = caps;
00669 }
00670
00671 std::string strike("X1");
00672 std::string maturity("X2");
00673
00674
00675
00676
00677 sort(sort0.begin(), caps0,
00678 boost::bind(std::less<int>(),
00679 boost::bind(&DataFrame::Record::as<int>,_1, maturity),
00680 boost::bind(&DataFrame::Record::as<int>,_2, maturity) ));
00681
00682
00683 stable_sort(sort0.begin(), caps0,
00684 boost::bind(std::less<double>(),
00685 boost::bind(&DataFrame::Record::as<double>,_1, strike),
00686 boost::bind(&DataFrame::Record::as<double>,_2, strike) ));
00687
00688 {
00689 DataFrame::ma_any_t sorted0 = payload0.as(sort0.begin(), caps0);
00690
00691 std::cerr << sorted0 << std::endl;
00692 }
00693
00694
00695
00696
00697 sort(caps, sort0.end(),
00698 boost::bind(std::less<int>(),
00699 boost::bind(&DataFrame::Record::as<int>,_1, maturity),
00700 boost::bind(&DataFrame::Record::as<int>,_2, maturity) ));
00701
00702
00703 stable_sort(caps, sort0.end(),
00704 boost::bind(std::less<double>(),
00705 boost::bind(&DataFrame::Record::as<double>,_1, strike),
00706 boost::bind(&DataFrame::Record::as<double>,_2, strike) ));
00707
00708 {
00709 DataFrame::ma_any_t sorted0 = payload0.as(caps, sort0.end());
00710
00711 std::cerr << sorted0 << std::endl;
00712 }
00713
00714 }
00715
00720
00721 BOOST_AUTO_TEST_CASE(b8)
00722 {
00723 using namespace eepgwde::detail;
00724
00725 BOOST_TEST_MESSAGE("QuantLib::price::sort0::b8");
00726
00727 std::string service0(fname0);
00728 service0 = service0.erase(service0.find("."));
00729
00730 DataFrame df(frame, service0);
00731
00732 df.render();
00733
00734 Typing t0;
00735 Typing::mappings_t mappings0 = t0.mappings();
00736 mappings0["PX"] = "name";
00737
00738
00739 DataFrame::headar h0(&df, mappings0);
00740 DataFrame::attr_pos_t h1 = h0;
00741 df.header = h1;
00742
00743 DataFrame::payloader payload0(df);
00744 std::vector<DataFrame::Record> sort0 = payload0;
00745
00746 BOOST_CHECK(sort0.size() > 0);
00747
00748 boost::regex e("[A-Z]+ISC[^ ]+ Cu.+");
00749 QPXisc comparor(e);
00750
00751
00752 std::vector<DataFrame::Record>::iterator caps =
00753 partition(sort0.begin(), sort0.end(),
00754 boost::bind(&QPXisc::compare,boost::ref(comparor),_1) );
00755
00756 std::vector<DataFrame::Record>::iterator caps0 = sort0.begin();
00757 if (caps != sort0.end() && caps != sort0.begin() ) {
00758 caps0 = caps;
00759 }
00760
00761 std::string strike("X1");
00762 std::string maturity("X2");
00763
00764
00765
00766
00767 sort(sort0.begin(), caps0,
00768 boost::bind(std::less<int>(),
00769 boost::bind(&DataFrame::Record::as<int>,_1, maturity),
00770 boost::bind(&DataFrame::Record::as<int>,_2, maturity) ));
00771
00772
00773 stable_sort(sort0.begin(), caps0,
00774 boost::bind(std::less<double>(),
00775 boost::bind(&DataFrame::Record::as<double>,_1, strike),
00776 boost::bind(&DataFrame::Record::as<double>,_2, strike) ));
00777
00778 DataFrame::ma_any_t sorted0 = payload0.as(sort0.begin(), caps0);
00779 std::cerr << sorted0 << std::endl;
00780
00781 std::vector<std::vector<DataFrame::Record>::iterator > marks;
00782 std::vector<DataFrame::Record>::iterator marker = sort0.begin();
00783
00784 while (1) {
00785 std::vector<DataFrame::Record>::iterator mark =
00786 adjacent_find(marker, caps0,
00787 boost::bind(std::greater<double>(),
00788 boost::bind(&DataFrame::Record::as<double>,_2, strike),
00789 boost::bind(&DataFrame::Record::as<double>,_1, strike) ));
00790 if (distance(mark,caps0) > 0) {
00791 std::cerr << "mark: "
00792 << mark->as<double>(strike) << " "
00793 << mark->as<double>(maturity) << std::endl;
00794 marks.push_back(mark);
00795 marker = mark + 1;
00796 }
00797 else
00798 break;
00799 }
00800 if (marks.size() > 0) {
00801 std::vector<DataFrame::Record>::iterator c = caps0;
00802 advance(c, -1);
00803 marks.push_back(c);
00804 }
00805
00806 BOOST_TEST_MESSAGE(marks.size());
00807
00808 for (std::vector<std::vector<DataFrame::Record>::iterator >::iterator
00809 i = marks.begin(); i != marks.end(); ++i) {
00810 std::vector<DataFrame::Record>::iterator r = *i;
00811 std::cerr << r->as<double>(strike) << " "
00812 << r->as<double>(maturity) << std::endl;
00813 }
00814
00815 }
00816
00817 BOOST_AUTO_TEST_SUITE_END()
00818
00819
00820