00001
00016 #include "scalt0.hpp"
00017
00018 #include <stack>
00019 #include <algorithm>
00020 #include <typeinfo>
00021
00022 #include <boost/bind.hpp>
00023 #include <boost/foreach.hpp>
00024
00025 #include <ql/utilities/tracing.hpp>
00026
00027 #include <ql/termstructures/yield/flatforward.hpp>
00028 #include <ql/indexes/ibor/euribor.hpp>
00029 #include <ql/time/daycounters/thirty360.hpp>
00030 #include <ql/time/daycounters/actualactual.hpp>
00031 #include <ql/time/schedule.hpp>
00032 #include <ql/utilities/dataformatters.hpp>
00033
00034 #include <ql/time/calendars/all.hpp>
00035
00036 #include "qlcal.cpp"
00037
00038 namespace {
00039
00040 using namespace QuantLib;
00041
00042 using namespace boost::unit_test_framework;
00043
00044 struct Results {
00045 std::deque<QuantLib::Real> results_;
00046 };
00047
00048 Results results;
00049
00051 struct CommonVars {
00052 static const Rate floor_;
00053 static const Rate cap_;
00054
00055
00056 std::deque<QuantLib::Real> & results_;
00057
00058
00059 Date today, settlement, startDate;
00060 Calendar calendar;
00061 Real nominal;
00062 std::vector<Real> nominals;
00063 BusinessDayConvention convention;
00064 Frequency frequency;
00065 boost::shared_ptr<IborIndex> index;
00066 Natural settlementDays, fixingDays;
00067 Integer length;
00068 Volatility volatility_;
00069 RelinkableHandle<YieldTermStructure> termStructure;
00070
00071
00072 SavedSettings backup;
00073
00074
00075 CommonVars() : results_(results.results_) {
00076 BOOST_TEST_MESSAGE("CommonVars set-up: results count: "
00077 << results_.size());
00078 length = 20;
00079 volatility_ = 0.20;
00080 nominal = 100.;
00081 nominals = std::vector<Real>(length,nominal);
00082 frequency = Annual;
00083 index = boost::shared_ptr<IborIndex>(new Euribor1Y(termStructure));
00084 calendar = index->fixingCalendar();
00085
00086 convention = ModifiedFollowing;
00087 today = calendar.adjust(Date::todaysDate());
00088 Settings::instance().evaluationDate() = today;
00089 settlementDays = 2;
00090 fixingDays = 2;
00091 settlement = calendar.advance(today,settlementDays,Days);
00092 startDate = settlement;
00093 boost::shared_ptr<YieldTermStructure>
00094 p = flatRate(settlement, static_cast<Rate>(0.05),
00095 ActualActual(ActualActual::ISDA));
00096
00097 termStructure.linkTo(p);
00098 }
00099
00100 ~CommonVars() {
00101 BOOST_TEST_MESSAGE("CommonVars tear-down");
00102 }
00103
00104 };
00105
00106 bool is_equal(Real tolerance_, Real value_, Real value1_) {
00107 return std::abs( value_ - value1_ ) < tolerance_;
00108 }
00109
00110 bool is_less(Real value_, Real value1_) {
00111 return value_ < value1_;
00112 }
00113
00114 }
00115
00116 #include "weekdays0.hpp"
00117
00118 BOOST_AUTO_TEST_SUITE (weekday)
00119
00120 BOOST_AUTO_TEST_CASE(map)
00121 {
00122 BOOST_TEST_MESSAGE("eepgwde::daemon::weekdays");
00123
00124 for(eepgwde::daemon::weekday_map_t::iterator
00125 it = eepgwde::daemon::weekdays.begin();
00126 it != eepgwde::daemon::weekdays.end(); ++it) {
00127 BOOST_TEST_MESSAGE("weekday: " << (*it).first );
00128 }
00129 }
00130
00131 BOOST_AUTO_TEST_SUITE_END()
00132
00133 #include "scal0.hpp"
00134
00135 #include <iostream>
00136
00137 namespace fs = boost::filesystem;
00138
00139 BOOST_AUTO_TEST_SUITE (eleve)
00140
00141 BOOST_AUTO_TEST_CASE(files)
00142 {
00143 BOOST_TEST_MESSAGE("eepgwde::daemon::Q::files");
00144
00145 BOOST_TEST_MESSAGE(eepgwde::daemon::detail::COMP0);
00146 BOOST_TEST_MESSAGE(eepgwde::daemon::Q::instance().id());
00147
00148 std::set<fs::path> set_;
00149 std::insert_iterator< std::set<fs::path> > iset_(set_,set_.begin());
00150
00151 std::cerr << eepgwde::daemon::Q::instance().files(iset_) << std::endl;
00152
00153 copy(set_.begin(), set_.end(),
00154 std::ostream_iterator<fs::path>(std::cerr, " "));
00155 std::cerr << std::endl;
00156
00157 }
00158
00159 BOOST_AUTO_TEST_CASE(failure0)
00160 {
00161 BOOST_TEST_MESSAGE("eepgwde::daemon::Q::calendars::failure0");
00162
00163 QuantLib::Calendar cal;
00164
00165 QL_TRACE_ON(std::cerr);
00166 QL_TRACE_ENABLE;
00167
00168 QL_TRACE("Tracing");
00169
00170 BOOST_CHECK_THROW( eepgwde::daemon::Q::instance().make(&cal, std::string("LON")) , std::exception );
00171
00172 }
00173
00174 BOOST_AUTO_TEST_CASE(calfiles)
00175 {
00176 BOOST_TEST_MESSAGE("eepgwde::daemon::Q::calendars::files");
00177
00178 fs::path path;
00179 QuantLib::Calendar cal;
00180
00181 QL_TRACE_ON(std::cerr);
00182 QL_TRACE_ENABLE;
00183
00184 QL_TRACE("Tracing");
00185
00186 path = eepgwde::daemon::Q::instance().path();
00187 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00188
00189 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00190
00191 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00192 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00193
00194 path = eepgwde::daemon::Q::instance().path();
00195 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00196
00197 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("LON"));
00198 BOOST_TEST_MESSAGE("QuantLib::Calendar::" << cal.name());
00199
00200 try {
00201 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("UNKNOWN"));
00202 } catch (const std::exception & e) {
00203 BOOST_TEST_MESSAGE("error: using UNKNOWN calendar::" << e.what());
00204 }
00205
00206 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("LOT"));
00207 BOOST_TEST_MESSAGE("QuantLib::Calendar::" << cal.name());
00208
00209 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("LPB"));
00210 BOOST_TEST_MESSAGE("QuantLib::Calendar::" << cal.name());
00211
00212 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("LOT"));
00213 BOOST_TEST_MESSAGE("QuantLib::Calendar::" << cal.name());
00214
00215 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("LPB"));
00216 BOOST_TEST_MESSAGE("QuantLib::Calendar::" << cal.name());
00217 }
00218
00219 BOOST_AUTO_TEST_CASE(bespoke1)
00220 {
00221 BOOST_TEST_MESSAGE("eepgwde::daemon::Q::calendars::dates");
00222
00223 fs::path path;
00224 QuantLib::Calendar cal;
00225
00226 QL_TRACE_ON(std::cerr);
00227 QL_TRACE_ENABLE;
00228
00229 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00230
00231 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00232 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00233
00234 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("EUR"));
00235 std::pair<QuantLib::Date, QuantLib::Date> range =
00236 eepgwde::daemon::Q::instance().added(cal);
00237 QuantLib::Date & from_ = range.first;
00238 QuantLib::Date & to_ = range.second;
00239
00240 BOOST_TEST_MESSAGE("QuantLib::Calendar::" << cal.name() << " "
00241 << QuantLib::io::iso_date(from_) << " "
00242 << QuantLib::io::iso_date(to_) );
00243
00244 }
00245
00246 #include <exception>
00247
00248 BOOST_AUTO_TEST_CASE(range)
00249 {
00250 BOOST_TEST_MESSAGE("eepgwde::daemon::Q::calendars::range");
00251
00252 fs::path path;
00253 QuantLib::Calendar cal;
00254
00255 QL_TRACE_ON(std::cerr);
00256 QL_TRACE_ENABLE;
00257
00258 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00259
00260 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00261 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00262
00263 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("EUR"));
00264 std::pair<QuantLib::Date, QuantLib::Date> range;
00265 BOOST_CHECK_NO_THROW(range = eepgwde::daemon::Q::instance().added(cal) );
00266 {
00267 QuantLib::Date & from_ = range.first;
00268 QuantLib::Date & to_ = range.second;
00269 BOOST_CHECK(to_ >= from_);
00270 }
00271
00272 cal = QuantLib::TARGET();
00273 BOOST_CHECK_THROW( range = eepgwde::daemon::Q::instance().added(cal), std::exception );
00274
00275 }
00276
00277 BOOST_AUTO_TEST_CASE(compare1)
00278 {
00279 BOOST_TEST_MESSAGE("eepgwde::detail::operator== Calendar Calendar");
00280
00281 QuantLib::Calendar cal0;
00282 QuantLib::Calendar cal1;
00283
00284 BOOST_CHECK( eepgwde::operator==(cal0, cal0) );
00285 BOOST_CHECK( eepgwde::operator==(cal0, cal1) == eepgwde::operator==(cal1, cal0) );
00286
00287 cal0 = QuantLib::TARGET();
00288 cal1 = QuantLib::TARGET();
00289
00290 BOOST_CHECK( eepgwde::operator==(cal0, cal1) == eepgwde::operator==(cal1, cal0) );
00291
00292 cal0 = QuantLib::UnitedKingdom();
00293 cal1 = QuantLib::TARGET();
00294
00295 BOOST_CHECK( eepgwde::operator!=(cal0, cal1) == eepgwde::operator!=(cal1, cal0) );
00296
00297 BOOST_CHECK( eepgwde::operator==(cal0, cal1) == eepgwde::operator==(cal1, cal0) );
00298 }
00299
00300 BOOST_AUTO_TEST_CASE(compare2)
00301 {
00302 BOOST_TEST_MESSAGE("eepgwde::daemon::Q::calendars::compare");
00303
00304 fs::path path;
00305 QuantLib::Calendar cal;
00306
00307 QL_TRACE_ON(std::cerr);
00308 QL_TRACE_ENABLE;
00309
00310 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00311
00312 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00313 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00314
00315 cal = eepgwde::daemon::Q::instance().make(&cal, std::string("EUR"));
00316 std::pair<QuantLib::Date, QuantLib::Date> range =
00317 eepgwde::daemon::Q::instance().added(cal);
00318 QuantLib::Date & from_ = range.first;
00319 QuantLib::Date & to_ = range.second;
00320
00321 BOOST_TEST_MESSAGE("QuantLib::Calendar::" << cal.name() << " "
00322 << QuantLib::io::iso_date(from_) << " "
00323 << QuantLib::io::iso_date(to_) );
00324
00325 std::vector<QuantLib::Date> holidays0, holidays1;
00326
00327 holidays0 = QuantLib::Calendar::holidayList(cal, from_, to_, 1);
00328
00329 holidays1 = QuantLib::Calendar::holidayList(QuantLib::TARGET(),
00330 from_, to_, 1);
00331
00332 std::set<QuantLib::Date> diffs;
00333 std::insert_iterator<std::set<QuantLib::Date> >
00334 idiffs(diffs, diffs.begin());
00335
00336 std::set_difference(holidays0.begin(), holidays0.end(),
00337 holidays1.begin(), holidays1.end(),
00338 idiffs);
00339
00340 BOOST_TEST_MESSAGE("QuantLib::Calendar::(" <<
00341 QuantLib::TARGET().name() << ", " << cal.name() << ") "
00342 << QuantLib::io::iso_date(from_) << " "
00343 << QuantLib::io::iso_date(to_) << " "
00344 << "differences: " << diffs.size() );
00345
00346 BOOST_FOREACH(QuantLib::Date d1, diffs) {
00347 std::cerr << "calendar::name::" << cal.name() <<
00348 " " << QuantLib::io::iso_date(d1) <<
00349 " " << QuantLib::io::short_weekday(d1.weekday()) <<
00350 std::endl;
00351 }
00352 }
00353
00354 BOOST_AUTO_TEST_CASE(compare3)
00355 {
00356 BOOST_TEST_MESSAGE("eepgwde::detail::operator== Calendar BespokeCalendar");
00357
00358 QuantLib::Calendar cal0;
00359 QuantLib::Calendar cal1;
00360
00361 fs::path path;
00362
00363 QL_TRACE_ON(std::cerr);
00364 QL_TRACE_ENABLE;
00365
00366 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00367
00368 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00369 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00370
00371 cal0 = eepgwde::daemon::Q::instance().make(&cal0, std::string("EUR"));
00372 cal1 = eepgwde::daemon::Q::instance().make(&cal1, std::string("EUR"));
00373
00374 BOOST_CHECK( eepgwde::operator==(cal0, cal0) );
00375 BOOST_CHECK( eepgwde::operator==(cal0, cal1) );
00376 BOOST_CHECK( eepgwde::operator==(cal1, cal0) );
00377
00378 cal1 = eepgwde::daemon::Q::instance().make(&cal1, std::string("LON"));
00379
00380 BOOST_CHECK( eepgwde::operator!=(cal0, cal1) );
00381
00382 cal1 = QuantLib::TARGET();
00383
00384 BOOST_CHECK( eepgwde::operator==(cal0, cal1) );
00385 BOOST_CHECK( eepgwde::operator==(cal1, cal0) );
00386 }
00387
00388 BOOST_AUTO_TEST_SUITE_END()
00389
00390 BOOST_AUTO_TEST_SUITE (corrections)
00391
00392 BOOST_AUTO_TEST_CASE(LON)
00393 {
00394 BOOST_TEST_MESSAGE("eepgwde::daemon vs. QuantLib::Calendar");
00395
00396 QuantLib::Calendar cal0;
00397 QuantLib::Calendar cal1;
00398
00399 fs::path path;
00400
00401 QL_TRACE_ON(std::cerr);
00402 QL_TRACE_ENABLE;
00403
00404 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00405
00406 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00407 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00408
00409 cal0 = eepgwde::daemon::Q::instance().make(&cal1, std::string("LON"));
00410 cal1 = QuantLib::UnitedKingdom();
00411
00412 BOOST_CHECK( eepgwde::operator==(cal0, cal1) );
00413 BOOST_CHECK( eepgwde::operator==(cal1, cal0) );
00414 }
00415
00416 BOOST_AUTO_TEST_CASE(fix)
00417 {
00418 BOOST_TEST_MESSAGE("eepgwde::daemon::NOTCOMP::fix");
00419 fs::path path;
00420
00421 QL_TRACE_ON(std::cerr);
00422 QL_TRACE_ENABLE;
00423
00424 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00425
00426 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00427 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00428
00429 std::map<const std::string, QuantLib::Calendar> mismatches =
00430 eepgwde::daemon::Q::instance().mismatches() ;
00431
00432 for (std::map<const std::string, QuantLib::Calendar>::iterator
00433 it = mismatches.begin(); it != mismatches.end(); ++it) {
00434 QuantLib::Calendar cal =
00435 eepgwde::daemon::Q::instance().make(&cal, it->first);
00436 QuantLib::Calendar & c = it->second;
00437 if (eepgwde::operator!=(cal, c)) {
00438 std::set<QuantLib::Date>
00439 dates = eepgwde::daemon::Q::instance().dates();
00440 BOOST_TEST_MESSAGE("diffs:," << dates.size() <<
00441 "," << "\"" << cal.name() << "\"" <<
00442 "," << "\"" << c.name() << "\"");
00443
00444 BOOST_FOREACH(QuantLib::Date d0, dates) {
00445 BOOST_TEST_MESSAGE(QuantLib::io::iso_date(d0) <<
00446 ": eleve: " << cal.isHoliday(d0) <<
00447 ": quantlib: " << c.isHoliday(d0));
00448
00449 if (cal.isHoliday(d0) && !c.isHoliday(d0))
00450 c.addHoliday(d0);
00451 else if (!cal.isHoliday(d0) && c.isHoliday(d0))
00452 c.removeHoliday(d0);
00453 }
00454 }
00455 }
00456
00457 BOOST_TEST_MESSAGE("eepgwde::daemon::Calendar::fix");
00458
00459 for (std::map<const std::string, QuantLib::Calendar>::iterator
00460 it = mismatches.begin(); it != mismatches.end(); ++it) {
00461 QuantLib::Calendar cal =
00462 eepgwde::daemon::Q::instance().make(&cal, it->first);
00463 QuantLib::Calendar & c = it->second;
00464 BOOST_CHECK(eepgwde::operator==(cal, c));
00465 std::set<QuantLib::Date>
00466 dates = eepgwde::daemon::Q::instance().dates();
00467 BOOST_TEST_MESSAGE("diffs:," << dates.size() <<
00468 "," << "\"" << cal.name() << "\"" <<
00469 "," << "\"" << c.name() << "\"");
00470 }
00471 }
00472
00473 BOOST_AUTO_TEST_CASE(fix0)
00474 {
00475 BOOST_TEST_MESSAGE("eepgwde::daemon::NOTCOMP::fix0");
00476 fs::path path;
00477
00478 QL_TRACE_ON(std::cerr);
00479 QL_TRACE_ENABLE;
00480
00481 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00482
00483 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00484 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00485
00486 std::map<const std::string, QuantLib::Calendar> mismatches0 =
00487 eepgwde::daemon::Q::instance().mismatches() ;
00488
00489 std::map<const std::string, QuantLib::Calendar> mismatches =
00490 eepgwde::daemon::Q::instance().mismatches() ;
00491
00492 mismatches.erase(mismatches.begin());
00493
00494 for (std::map<const std::string, QuantLib::Calendar>::iterator
00495 it = mismatches.begin(); it != mismatches.end(); ++it) {
00496 QuantLib::Calendar cal =
00497 eepgwde::daemon::Q::instance().make(&cal, it->first);
00498 QuantLib::Calendar & c = it->second;
00499 if (eepgwde::operator!=(cal, c)) {
00500 std::set<QuantLib::Date>
00501 dates = eepgwde::daemon::Q::instance().dates();
00502 BOOST_TEST_MESSAGE("diffs:," << dates.size() <<
00503 "," << "\"" << cal.name() << "\"" <<
00504 "," << "\"" << c.name() << "\"");
00505
00506 BOOST_FOREACH(QuantLib::Date d0, dates) {
00507 BOOST_TEST_MESSAGE(QuantLib::io::iso_date(d0) <<
00508 ": eleve: " << cal.isHoliday(d0) <<
00509 ": quantlib: " << c.isHoliday(d0));
00510
00511 if (cal.isHoliday(d0) && !c.isHoliday(d0))
00512 c.addHoliday(d0);
00513 else if (!cal.isHoliday(d0) && c.isHoliday(d0))
00514 c.removeHoliday(d0);
00515 }
00516 }
00517 }
00518
00519 BOOST_TEST_MESSAGE("eepgwde::daemon::Calendar::fix0");
00520
00521 for (std::map<const std::string, QuantLib::Calendar>::iterator
00522 it = mismatches0.begin(); it != mismatches0.end(); ++it) {
00523 QuantLib::Calendar cal =
00524 eepgwde::daemon::Q::instance().make(&cal, it->first);
00525 QuantLib::Calendar & c = it->second;
00526 BOOST_CHECK(eepgwde::operator==(cal, c));
00527 std::set<QuantLib::Date>
00528 dates = eepgwde::daemon::Q::instance().dates();
00529 BOOST_TEST_MESSAGE("diffs:," << dates.size() <<
00530 "," << "\"" << cal.name() << "\"" <<
00531 "," << "\"" << c.name() << "\"");
00532 }
00533 }
00534
00535 BOOST_AUTO_TEST_CASE(fix1)
00536 {
00537 BOOST_TEST_MESSAGE("eepgwde::daemon::NOTCOMP::fix1");
00538 fs::path path;
00539
00540 QL_TRACE_ON(std::cerr);
00541 QL_TRACE_ENABLE;
00542
00543 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00544
00545 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00546 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00547
00548 std::map<const std::string, QuantLib::Calendar> mismatches =
00549 eepgwde::daemon::Q::instance().mismatches() ;
00550
00551 for (std::map<const std::string, QuantLib::Calendar>::iterator
00552 it = mismatches.begin(); it != mismatches.end(); ++it) {
00553 QuantLib::Calendar cal =
00554 eepgwde::daemon::Q::instance().make(&cal, it->first);
00555 QuantLib::Calendar & c = it->second;
00556 if (eepgwde::operator!=(cal, c)) {
00557 std::set<QuantLib::Date>
00558 dates = eepgwde::daemon::Q::instance().dates();
00559 BOOST_TEST_MESSAGE("diffs:," << dates.size() <<
00560 "," << "\"" << cal.name() << "\"" <<
00561 "," << "\"" << c.name() << "\"");
00562 }
00563 }
00564
00565 std::map<const std::string, QuantLib::Calendar> mismatches0 =
00566 eepgwde::daemon::Q::instance().fix();
00567
00568 BOOST_TEST_MESSAGE("eepgwde::daemon::Calendar::fix1");
00569
00570 for (std::map<const std::string, QuantLib::Calendar>::iterator
00571 it = mismatches0.begin(); it != mismatches0.end(); ++it) {
00572 QuantLib::Calendar cal =
00573 eepgwde::daemon::Q::instance().make(&cal, it->first);
00574 QuantLib::Calendar & c = it->second;
00575 BOOST_CHECK(eepgwde::operator==(cal, c));
00576 std::set<QuantLib::Date>
00577 dates = eepgwde::daemon::Q::instance().dates();
00578 BOOST_TEST_MESSAGE("diffs:," << dates.size() <<
00579 "," << "\"" << cal.name() << "\"" <<
00580 "," << "\"" << c.name() << "\"");
00581 }
00582 }
00583
00584 BOOST_AUTO_TEST_SUITE_END()
00585
00586 BOOST_AUTO_TEST_SUITE (comparisons)
00587
00588 BOOST_AUTO_TEST_CASE(comp)
00589 {
00590 BOOST_TEST_MESSAGE("eepgwde::daemon vs. QuantLib::Calendar NOTCOMP");
00591
00592 QuantLib::Calendar cal0;
00593 QuantLib::Calendar cal1;
00594
00595 fs::path path;
00596
00597 QL_TRACE_ON(std::cerr);
00598 QL_TRACE_ENABLE;
00599
00600 BOOST_REQUIRE(::getenv("ELEVE_CONFIG_PATH"));
00601
00602 path = eepgwde::daemon::Q::instance().path(fs::path(::getenv("ELEVE_CONFIG_PATH")));
00603 path = path / fs::path(eepgwde::daemon::detail::COMP0);
00604 BOOST_TEST_MESSAGE("QuantLib::Calendar::path::" << path);
00605
00606 std::set<fs::path> cals;
00607 std::insert_iterator<std::set<fs::path> > icals(cals, cals.begin());
00608
00609 boost::regex re(std::string(".+") + std::string("\\.")
00610 + eepgwde::daemon::detail::suffix);
00611 eepgwde::daemon::Q::instance().files(icals, path, re);
00612
00613 for (std::set<fs::path>::iterator it = cals.begin();
00614 it != cals.end(); ++it) {
00615 std::cerr << (*it) << std::endl;
00616 QuantLib::Calendar cal =
00617 eepgwde::daemon::Q::instance().make(&cal, *it);
00618
00619 for (QuantLib::qlcal_map_t::iterator it = QuantLib::qlcals.begin();
00620 it != QuantLib::qlcals.end(); ++it) {
00621 QuantLib::Calendar & c = it->second;
00622 if (eepgwde::operator==(cal, c)) {
00623 BOOST_TEST_MESSAGE("match:," << cal.name() <<
00624 "," << it->first << "," <<
00625 "\"" << c.name() << "\"");
00626 } else {
00627 int count = eepgwde::daemon::Q::instance().dates().size();
00628 BOOST_TEST_MESSAGE("diffs:," << count << "," << cal.name() <<
00629 "," << it->first << "," <<
00630 "\"" << c.name() << "\"");
00631 }
00632 }
00633 }
00634
00635 }
00636
00637
00638 BOOST_AUTO_TEST_SUITE_END()
00639