@@ -246,6 +246,75 @@ BOOST_AUTO_TEST_CASE(testBootstrapAndFixings) {
246246 BOOST_CHECK_NO_THROW (YieldCurve jpyYieldCurve (asof, spec, curveConfigs, loader));
247247}
248248
249+ BOOST_AUTO_TEST_CASE (testBuildDiscountCurveDirectSegment) {
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-14" );
260+ quotes.emplace_back (" DISCOUNT/RATE/EUR/EUR-CURVE/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" , " EUR" , " " , segments);
267+ curveConfigs.add (CurveSpec::CurveType::Yield, " EUR-CURVE" , yCConfig);
268+
269+ vector<string> data{" 2023-10-12 DISCOUNT/RATE/SEK/STINA-CURVE/2023-10-13 0.77" ,
270+ " 2023-10-12 DISCOUNT/RATE/EUR/EUR-ANOTHER-CURVE/2023-10-13 0.95" ,
271+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-ANOTHER-CURVE/2023-10-14 0.95" ,
272+ " 2023-10-12 DISCOUNT/RATE/EUR/EUR-CURVE/2023-10-12 0.88" ,
273+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE/2023-10-13 1.0" ,
274+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE/2023-10-14 0.99" ,
275+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE/2023-10-15 0.98" ,
276+ " 2023-10-13 COMMODITY_FWD/PRICE/GOLD/USD/2023-10-31 1158.8" ,
277+ " 2023-10-13 COMMODITY_FWD/PRICE/GOLD/USD/2023-11-01 1160.9" ,
278+ " 2023-10-13 COMMODITY_FWD/PRICE/GOLD/USD/2023-11-02 1163.4" };
279+ MarketDataLoader loader (data);
280+
281+ BOOST_CHECK_NO_THROW (YieldCurve yieldCurve (asof, spec, curveConfigs, loader));
282+ }
283+
284+ BOOST_AUTO_TEST_CASE (testBuildDiscountCurveDirectSegmentWildcard) {
285+
286+ Date asof (13 , October, 2023 );
287+ Settings::instance ().evaluationDate () = asof;
288+
289+ YieldCurveSpec spec (" EUR" , " EUR-CURVE" );
290+
291+ CurveConfigurations curveConfigs;
292+
293+ vector<string> quotes;
294+ quotes.emplace_back (" DISCOUNT/RATE/EUR/EUR-CURVE/*" );
295+
296+ vector<boost::shared_ptr<YieldCurveSegment>> segments{
297+ boost::make_shared<DirectYieldCurveSegment>(" Discount" , " " , quotes)};
298+
299+ boost::shared_ptr<YieldCurveConfig> yCConfig = boost::make_shared<YieldCurveConfig>(
300+ " EUR-CURVE" , " ORE YieldCurve built from EUR-CURVE" , " EUR" , " " , segments);
301+ curveConfigs.add (CurveSpec::CurveType::Yield, " EUR-CURVE" , yCConfig);
302+
303+ vector<string> data{" 2023-10-12 DISCOUNT/RATE/SEK/STINA-CURVE/2023-10-13 0.77" ,
304+ " 2023-10-12 DISCOUNT/RATE/EUR/EUR-ANOTHER-CURVE/2023-10-13 0.95" ,
305+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-ANOTHER-CURVE/2023-10-14 0.95" ,
306+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE/2023-10-13 1.0" ,
307+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE/2023-10-14 0.99" ,
308+ " 2023-10-13 DISCOUNT/RATE/EUR/EUR-CURVE/2023-10-15 0.98" ,
309+ " 2023-10-13 EQUITY_FWD/PRICE/SP5/USD/1Y 1500.00" ,
310+ " 2023-10-13 EQUITY_FWD/PRICE/SP5/USD/20231014 1500.00" ,
311+ " 2023-10-13 EQUITY_DIVIDEND/RATE/SP5/USD/20231015 0.00" ,
312+ " 2023-10-13 EQUITY_DIVIDEND/RATE/SP5/USD/2Y 0.00" };
313+ MarketDataLoader loader (data);
314+
315+ BOOST_CHECK_NO_THROW (YieldCurve yieldCurve (asof, spec, curveConfigs, loader));
316+ }
317+
249318// Test ARS-IN-USD failures using the old QuantLib::IterativeBootstrap parameters
250319BOOST_DATA_TEST_CASE (testBootstrapARSinUSDFailures, bdata::make(curveConfigFiles), curveConfigFile) {
251320
0 commit comments