@@ -246,6 +246,70 @@ BOOST_AUTO_TEST_CASE(testBootstrapAndFixings) {
246246 BOOST_CHECK_NO_THROW (YieldCurve jpyYieldCurve (asof, spec, curveConfigs, loader));
247247}
248248
249+ BOOST_AUTO_TEST_CASE (testBootstrapAndFixingsDirectYc) {
250+
251+ Date asof (13 , October, 2023 );
252+ Settings::instance ().evaluationDate () = asof;
253+
254+ YieldCurveSpec spec (" EUR" , " EUR-CURVE" );
255+
256+ CurveConfigurations curveConfigs;
257+
258+ vector<string> quotes;
259+ quotes.emplace_back (" DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/2023-10-14" );
260+ quotes.emplace_back (" DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/2023-10-15" );
261+
262+ vector<boost::shared_ptr<YieldCurveSegment>> segments{boost::make_shared<DirectYieldCurveSegment>(
263+ " Discount" , " " , quotes)};
264+
265+ boost::shared_ptr<YieldCurveConfig> yCConfig =
266+ boost::make_shared<YieldCurveConfig>(" EUR-CURVE" , " ORE YieldCurve built from EUR-CURVE_2023-10-13" , " EUR" , " " , segments);
267+ curveConfigs.add (CurveSpec::CurveType::Yield, " EUR-CURVE" , yCConfig);
268+
269+ vector<string> data{" 2023-10-12 DISCOUNT/RATE/EUR/STINA-CURVE_2023-10-12/2023-10-13 0.77" ,
270+ " 2023-10-12 DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-12/2023-10-12 0.88" ,
271+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/2023-10-13 1.0" ,
272+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/2023-10-14 0.99" ,
273+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/2023-10-15 0.98" ,
274+ " 2023-10-13 COMMODITY_FWD/PRICE/GOLD/USD/2023-10-31 1158.8" ,
275+ " 2023-10-13 COMMODITY_FWD/PRICE/GOLD/USD/2023-11-01 1160.9" ,
276+ " 2023-10-13 COMMODITY_FWD/PRICE/GOLD/USD/2023-11-02 1163.4" };
277+ MarketDataLoader loader (data);
278+
279+ BOOST_CHECK_NO_THROW (YieldCurve yieldCurve (asof, spec, curveConfigs, loader));
280+ }
281+
282+ BOOST_AUTO_TEST_CASE (testBootstrapAndFixingsDirectYcWildChar) {
283+
284+ Date asof (13 , October, 2023 );
285+ Settings::instance ().evaluationDate () = asof;
286+
287+ YieldCurveSpec spec (" EUR" , " EUR-CURVE" );
288+
289+ CurveConfigurations curveConfigs;
290+
291+ vector<string> quotes;
292+ quotes.emplace_back (" DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/*" );
293+
294+ vector<boost::shared_ptr<YieldCurveSegment>> segments{
295+ boost::make_shared<DirectYieldCurveSegment>(" Discount" , " " , quotes)};
296+
297+ boost::shared_ptr<YieldCurveConfig> yCConfig = boost::make_shared<YieldCurveConfig>(
298+ " EUR-CURVE" , " ORE YieldCurve built from EUR-CURVE_2023-10-13" , " EUR" , " " , segments);
299+ curveConfigs.add (CurveSpec::CurveType::Yield, " EUR-CURVE" , yCConfig);
300+
301+ vector<string> data{" 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/2023-10-13 1.0" ,
302+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/2023-10-14 0.99" ,
303+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE_2023-10-13/2023-10-15 0.98" ,
304+ " 2023-10-13 EQUITY_FWD/PRICE/SP5/USD/1Y 1500.00" ,
305+ " 2023-10-13 EQUITY_FWD/PRICE/SP5/USD/20231014 1500.00" ,
306+ " 2023-10-13 EQUITY_DIVIDEND/RATE/SP5/USD/20231015 0.00" ,
307+ " 2023-10-13 EQUITY_DIVIDEND/RATE/SP5/USD/2Y 0.00" };
308+ MarketDataLoader loader (data);
309+
310+ BOOST_CHECK_NO_THROW (YieldCurve yieldCurve (asof, spec, curveConfigs, loader));
311+ }
312+
249313// Test ARS-IN-USD failures using the old QuantLib::IterativeBootstrap parameters
250314BOOST_DATA_TEST_CASE (testBootstrapARSinUSDFailures, bdata::make(curveConfigFiles), curveConfigFile) {
251315
0 commit comments