From 399029c9f3a7376333bdcefa1a6de61441d709a9 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Tue, 14 Jul 2026 09:05:20 -0500 Subject: [PATCH 1/5] Simplify tests/tinytest.R by removing no longer needed code --- ChangeLog | 4 ++++ tests/tinytest.R | 12 ++---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 344fc5e5..1d9e81b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2026-07-14 Dirk Eddelbuettel + + * tests/tinytest.R: Removed some old and now-unneeded versioning + 2026-07-10 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.4.28 diff --git a/tests/tinytest.R b/tests/tinytest.R index 4a924cac..722b392a 100644 --- a/tests/tinytest.R +++ b/tests/tinytest.R @@ -1,15 +1,7 @@ -if (requireNamespace("tinytest", quietly=TRUE) && - utils::packageVersion("tinytest") >= "1.0.0") { - - ## Set a seed to make the test deterministic - set.seed(42) - - ## R makes us to this - Sys.setenv("R_TESTS"="") - +if (requireNamespace("tinytest", quietly=TRUE)) { ## there are several more granular ways to test files in a tinytest directory, ## see its package vignette; tests can also run once the package is installed - ## using the same command `test_package(pkgName)`, or by director or file + ## using the same command `test_package(pkgName)`, or by directory or file tinytest::test_package("RQuantLib", ncpu=getOption("Ncpus", 1)) } From 4d6dfc38b6608c8c9cbafed84a1e952082775e6e Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Tue, 14 Jul 2026 09:29:53 -0500 Subject: [PATCH 2/5] Add ccache-with-R to windows ci action --- .github/workflows/windows.yaml | 6 ++++++ ChangeLog | 2 ++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/windows.yaml b/.github/workflows/windows.yaml index ceeaa271..42b6862a 100644 --- a/.github/workflows/windows.yaml +++ b/.github/workflows/windows.yaml @@ -35,9 +35,15 @@ jobs: - uses: r-lib/actions/setup-r-dependencies@v2 with: + cache: false extra-packages: any::rcmdcheck needs: check + - name: Setup ccache for R + uses: eddelbuettel/github-actions/ccache-with-R@master + with: + key: ${{ matrix.os }}-${{ matrix.r }} + - uses: r-lib/actions/check-r-package@v2 with: error-on: '"error"' diff --git a/ChangeLog b/ChangeLog index 1d9e81b9..404b53bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * tests/tinytest.R: Removed some old and now-unneeded versioning + * .github/workflows/windows.yank: Add ccache-with-R action + 2026-07-10 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Release 0.4.28 From 93fad8a1f2d9739299c4cf319460c6267800a90d Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Tue, 14 Jul 2026 09:43:08 -0500 Subject: [PATCH 3/5] Updated set of calendars --- ChangeLog | 3 + R/calendars.R | 17 ++++- src/calendars.cpp | 161 ++++++++++++++++++++++++++++++++++------------ 3 files changed, 137 insertions(+), 44 deletions(-) diff --git a/ChangeLog b/ChangeLog index 404b53bd..2d960efc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2026-07-14 Dirk Eddelbuettel + * R/calendars.R: Updated set of calendars + * src/calendars.cpp: Idem + * tests/tinytest.R: Removed some old and now-unneeded versioning * .github/workflows/windows.yank: Add ccache-with-R action diff --git a/R/calendars.R b/R/calendars.R index 4d99eda3..cf151f40 100644 --- a/R/calendars.R +++ b/R/calendars.R @@ -1,7 +1,7 @@ ## RQuantLib -- R interface to the QuantLib libraries ## -## Copyright (C) 2002 - 2021 Dirk Eddelbuettel -## Copyright (C) 2010 Dirk Eddelbuettel and Khanh Nguyen +## Copyright (C) 2002-2026 Dirk Eddelbuettel +## Copyright (C) 2010 Dirk Eddelbuettel and Khanh Nguyen ## ## This file is part of the RQuantLib library for GNU R. ## It is made available under the terms of the GNU General Public @@ -26,8 +26,10 @@ calendars <- c("TARGET", "UnitedStates/GovernmentBond", "UnitedStates/NERC", "UnitedStates/FederalReserve", + "UnitedStates/SOFR", "Argentina", "Australia", + "Australia/ASX", "Austria", "Austria/Exchange", "Bespoke", @@ -39,6 +41,7 @@ calendars <- c("TARGET", "Chile", "China", "China/IB", + "Croatia", "CzechRepublic", "Denmark", "Finland", @@ -55,19 +58,28 @@ calendars <- c("TARGET", "India", "Indonesia", "Israel", + "Israel/TASE", + "Israel/SHIR", + "Israel/Telbor", "Italy", "Italy/Exchange", "Japan", + "Malta", "Mexico", + "Montenegro", "NewZealand", + "NewZealand/Auckland", + "NorthMacedonia", "Norway", "Null", "Poland", "Romania", "Russia", "SaudiArabia", + "Serbia", "Singapore", "Slovakia", + "Slovenia", "SouthAfrica", "SouthKorea", "SouthKorea/KRX", @@ -80,6 +92,7 @@ calendars <- c("TARGET", "UnitedKingdom", "UnitedKingdom/Exchange", "UnitedKingdom/Metals", + "Uzbekistan", "WeekendsOnly") ## isBusinessDay <- function(calendar="TARGET", dates=Sys.Date()) { diff --git a/src/calendars.cpp b/src/calendars.cpp index 047483f6..6cfcb542 100644 --- a/src/calendars.cpp +++ b/src/calendars.cpp @@ -26,15 +26,46 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal if (calstr == "TARGET") { // generic calendar pcal.reset(new QuantLib::TARGET()); + } else if (calstr == "UnitedStates" || + calstr == "UnitedStates/Settlement" || + calstr == "UnitedStates::Settlement") { + pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::Settlement)); + } else if (calstr == "UnitedStates/LiborImpact" || + calstr == "UnitedStates::LiborImpact") { + pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::LiborImpact)); + } else if (calstr == "UnitedStates/NYSE" || + calstr == "UnitedStates::NYSE") { + pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::NYSE)); + } else if (calstr == "UnitedStates/GovernmentBond" || + calstr == "UnitedStates::GovernmentBond") { + pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::GovernmentBond)); + } else if (calstr == "UnitedStates/NERC" || + calstr == "UnitedStates::NERC") { + pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::NERC)); + } else if (calstr == "UnitedStates/FederalReserve" || + calstr == "UnitedStates::FederalReserve") { + pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::FederalReserve)); + } else if (calstr == "UnitedStates/SOFR" || + calstr == "UnitedStates::SOFR") { + pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::SOFR)); + } else if (calstr == "Argentina") { pcal.reset(new QuantLib::Argentina()); - } else if (calstr == "Australia") { - pcal.reset(new QuantLib::Australia()); - - } else if (calstr == "Austria" || calstr == "Austria/Settlement") { - pcal.reset(new QuantLib::Austria()); - } else if (calstr == "Austria/Exchange") { + } else if (calstr == "Australia" || + calstr == "Australia/Settlement" || + calstr == "Australia::Settlement") { + pcal.reset(new QuantLib::Australia(QuantLib::Australia::Settlement)); + } else if (calstr == "Australia/ASX" || + calstr == "Australia::ASX") { + pcal.reset(new QuantLib::Australia(QuantLib::Australia::ASX)); + + } else if (calstr == "Austria" || + calstr == "Austria/Settlement" || + calstr == "Austria::Settlement") { + pcal.reset(new QuantLib::Austria(QuantLib::Austria::Settlement)); + } else if (calstr == "Austria/Exchange" || + calstr == "Austria::Exchange") { pcal.reset(new QuantLib::Austria(QuantLib::Austria::Exchange)); } else if (calstr == "Bespoke") { @@ -42,24 +73,38 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "Botswana") { pcal.reset(new QuantLib::Botswana()); - } else if (calstr == "Botswana") { - pcal.reset(new QuantLib::Botswana()); - - } else if (calstr == "Brazil") { - pcal.reset(new QuantLib::Brazil()); - } else if (calstr == "Canada" || calstr == "Canada/Settlement") { + } else if (calstr == "Brazil" || + calstr == "Brazil/Settlement" || + calstr == "Brazil::Settlement") { + pcal.reset(new QuantLib::Brazil(QuantLib::Brazil::Settlement)); + } else if (calstr == "Brazil/Exchange" || + calstr == "Brazil::Exchange") { + pcal.reset(new QuantLib::Brazil(QuantLib::Brazil::Exchange)); + + } else if (calstr == "Canada" || + calstr == "Canada/Settlement" || + calstr == "Canada::Settlement") { pcal.reset(new QuantLib::Canada(QuantLib::Canada::Settlement)); - } else if (calstr == "Canada/TSX") { + } else if (calstr == "Canada/TSX" || + calstr == "Canada::TSX") { pcal.reset(new QuantLib::Canada(QuantLib::Canada::TSX)); -#if QL_HEX_VERSION >= 0x012400f0 } else if (calstr == "Chile") { pcal.reset(new QuantLib::Chile()); -#endif - } else if (calstr == "China") { - pcal.reset(new QuantLib::China()); + } else if (calstr == "China" || + calstr == "China/SSE" || + calstr == "China::SSE") { + pcal.reset(new QuantLib::China(QuantLib::China::SSE)); + } else if (calstr == "China/IB" || + calstr == "China::IB") { + pcal.reset(new QuantLib::China(QuantLib::China::IB)); + +#if QL_HEX_VERSION >= 0x014300f0 + } else if (calstr == "Croatia") { + pcal.reset(new QuantLib::Croatia()); +#endif } else if (calstr == "CzechRepublic") { pcal.reset(new QuantLib::CzechRepublic()); @@ -70,19 +115,30 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "Finland") { pcal.reset(new QuantLib::Finland()); - } else if (calstr == "France" || calstr == "France/Settlement") { + } else if (calstr == "France" || + calstr == "France/Settlement" || + calstr == "France::Settlement") { pcal.reset(new QuantLib::France(QuantLib::France::Settlement)); - } else if (calstr == "France/Exchange") { + } else if (calstr == "France/Exchange" || + calstr == "France::Exchange") { pcal.reset(new QuantLib::France(QuantLib::France::Exchange)); - } else if (calstr == "Germany" || calstr == "Germany/FrankfurtStockExchange") { - pcal.reset(new QuantLib::Germany(QuantLib::Germany::FrankfurtStockExchange)); - } else if (calstr == "Germany/Settlement") { + } else if (calstr == "Germany" || + calstr == "Germany/Settlement" || + calstr == "Germany::Settlement") { pcal.reset(new QuantLib::Germany(QuantLib::Germany::Settlement)); - } else if (calstr == "Germany/Xetra") { + } else if (calstr == "Germany/FrankfurtStockExchange" || + calstr == "Germany::FrankfurtStockExchange") { + pcal.reset(new QuantLib::Germany(QuantLib::Germany::FrankfurtStockExchange)); + } else if (calstr == "Germany/Xetra" || + calstr == "Germany::Xetra") { pcal.reset(new QuantLib::Germany(QuantLib::Germany::Xetra)); - } else if (calstr == "Germany/Eurex") { + } else if (calstr == "Germany/Eurex" || + calstr == "Germany::Eurex") { pcal.reset(new QuantLib::Germany(QuantLib::Germany::Eurex)); + } else if (calstr == "Germany/Euwax" || + calstr == "Germany::Euwax") { + pcal.reset(new QuantLib::Germany(QuantLib::Germany::Euwax)); } else if (calstr == "HongKong") { pcal.reset(new QuantLib::HongKong()); @@ -113,19 +169,40 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal pcal.reset(new QuantLib::Israel(QuantLib::Israel::Telbor)); #endif - } else if (calstr == "Italy" || calstr == "Italy/Settlement") { + } else if (calstr == "Italy" || + calstr == "Italy/Settlement" || + calstr == "Italy::Settlement") { pcal.reset(new QuantLib::Italy(QuantLib::Italy::Settlement)); - } else if (calstr == "Italy/Exchange") { + } else if (calstr == "Italy/Exchange" || + calstr == "Italy::Exchange") { pcal.reset(new QuantLib::Italy(QuantLib::Italy::Exchange)); } else if (calstr == "Japan" || calstr == "Japan/Settlement") { pcal.reset(new QuantLib::Japan()); +#if QL_HEX_VERSION >= 0x014300f0 + } else if (calstr == "Malta") { + pcal.reset(new QuantLib::Malta()); +#endif + } else if (calstr == "Mexico") { pcal.reset(new QuantLib::Mexico()); - } else if (calstr == "NewZealand") { - pcal.reset(new QuantLib::NewZealand()); +#if QL_HEX_VERSION >= 0x014300f0 + } else if (calstr == "Montenegro") { + pcal.reset(new QuantLib::Montenegro()); +#endif + + } else if (calstr == "NewZealand" || + calstr == "NewZealand/Wellington") { + pcal.reset(new QuantLib::NewZealand(QuantLib::NewZealand::Wellington)); + } else if (calstr == "NewZealand/Auckland") { + pcal.reset(new QuantLib::NewZealand(QuantLib::NewZealand::Auckland)); + +#if QL_HEX_VERSION >= 0x014300f0 + } else if (calstr == "NorthMacedonia") { + pcal.reset(new QuantLib::NorthMacedonia()); +#endif } else if (calstr == "Norway") { pcal.reset(new QuantLib::Norway()); @@ -138,12 +215,10 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "Poland") { pcal.reset(new QuantLib::Poland()); -#if QL_HEX_VERSION >= 0x011900f0 } else if (calstr == "Romania" || calstr == "Romania/Public") { pcal.reset(new QuantLib::Romania(QuantLib::Romania::Public)); } else if (calstr == "Romania/BVB") { pcal.reset(new QuantLib::Romania(QuantLib::Romania::BVB)); -#endif } else if (calstr == "Russia") { pcal.reset(new QuantLib::Russia()); @@ -151,12 +226,22 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "SaudiArabia") { pcal.reset(new QuantLib::SaudiArabia()); +#if QL_HEX_VERSION >= 0x014300f0 + } else if (calstr == "Serbia") { + pcal.reset(new QuantLib::Serbia()); +#endif + } else if (calstr == "Singapore") { pcal.reset(new QuantLib::Singapore()); } else if (calstr == "Slovakia") { pcal.reset(new QuantLib::Slovakia()); +#if QL_HEX_VERSION >= 0x014300f0 + } else if (calstr == "Slovenia") { + pcal.reset(new QuantLib::Slovenia()); +#endif + } else if (calstr == "SouthAfrica") { pcal.reset(new QuantLib::SouthAfrica()); @@ -190,18 +275,10 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "UnitedKingdom/Metals") { pcal.reset(new QuantLib::UnitedKingdom(QuantLib::UnitedKingdom::Metals)); - } else if (calstr == "UnitedStates" || calstr == "UnitedStates/Settlement") { - pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::Settlement)); - } else if (calstr == "UnitedStates/NYSE") { - pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::NYSE)); - } else if (calstr == "UnitedStates/GovernmentBond") { - pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::GovernmentBond)); - } else if (calstr == "UnitedStates/NERC") { - pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::NERC)); - } else if (calstr == "UnitedStates/LiborImpact") { - pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::LiborImpact)); - } else if (calstr == "UnitedStates/FederalReserve") { - pcal.reset(new QuantLib::UnitedStates(QuantLib::UnitedStates::FederalReserve)); +#if QL_HEX_VERSION >= 0x014300f0 + } else if (calstr == "Uzbekistan") { + pcal.reset(new QuantLib::Uzbekistan()); +#endif } else if (calstr == "WeekendsOnly") { pcal.reset(new QuantLib::WeekendsOnly()); From c76aae30075c1f7bf64dd332116b60c388c0b955 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Tue, 14 Jul 2026 09:54:48 -0500 Subject: [PATCH 4/5] Condition New Zealand's updated ctors on QL (>= 1.37) --- src/calendars.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/calendars.cpp b/src/calendars.cpp index 6cfcb542..c4ebef0b 100644 --- a/src/calendars.cpp +++ b/src/calendars.cpp @@ -193,11 +193,16 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal pcal.reset(new QuantLib::Montenegro()); #endif +#if QL_HEX_VERSION >= 0x013700f0 } else if (calstr == "NewZealand" || calstr == "NewZealand/Wellington") { pcal.reset(new QuantLib::NewZealand(QuantLib::NewZealand::Wellington)); } else if (calstr == "NewZealand/Auckland") { pcal.reset(new QuantLib::NewZealand(QuantLib::NewZealand::Auckland)); +#else + } else if (calstr == "NewZealand") { + pcal.reset(new QuantLib::NewZealand()); +#endif #if QL_HEX_VERSION >= 0x014300f0 } else if (calstr == "NorthMacedonia") { From 76efeebc80d7933257754b15b458d3df2015af93 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Tue, 14 Jul 2026 10:07:58 -0500 Subject: [PATCH 5/5] Comment-out ccache use, add workflow_dispatch, disable for push+pr --- .github/workflows/windows.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/windows.yaml b/.github/workflows/windows.yaml index 42b6862a..42b84a24 100644 --- a/.github/workflows/windows.yaml +++ b/.github/workflows/windows.yaml @@ -1,8 +1,9 @@ # Workflow derived from https://github.com/r-lib/actions/tree/v2/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: - push: - pull_request: + #push: + #pull_request: + workflow_dispatch: name: Windows @@ -35,14 +36,13 @@ jobs: - uses: r-lib/actions/setup-r-dependencies@v2 with: - cache: false extra-packages: any::rcmdcheck needs: check - - name: Setup ccache for R - uses: eddelbuettel/github-actions/ccache-with-R@master - with: - key: ${{ matrix.os }}-${{ matrix.r }} + #- name: Setup ccache for R + # uses: eddelbuettel/github-actions/ccache-with-R@master + # with: + # key: ${{ matrix.os }}-${{ matrix.r }} - uses: r-lib/actions/check-r-package@v2 with: