From bd31aec3782b379d7197848643cd41e28257c429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Mon, 3 May 2021 15:00:37 +0200 Subject: [PATCH] Fix double() method for dates at yearly frequency Closes: #47 --- src/@dates/double.m | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/@dates/double.m b/src/@dates/double.m index dd9bd95..f1fbe0c 100644 --- a/src/@dates/double.m +++ b/src/@dates/double.m @@ -33,10 +33,14 @@ if o.freq==365 % Would need to find a way to deal with leap years end -years = floor((o.time-1)/o.freq); -subperiods = o.time-years*o.freq; +if o.freq == 1 + m = o.time; +else + years = floor((o.time-1)/o.freq); + subperiods = o.time-years*o.freq; + m = years+(subperiods-1)/o.freq; +end -m = years+(subperiods-1)/o.freq; if nargout>1 f = o.freq; end @@ -82,4 +86,24 @@ if t(1) t(2) = isequal(C,E); end T = all(t); -%@eof:2 \ No newline at end of file +%@eof:2 + +%@test:3 +% Regression test for dseries#47 +B = dates('1950Y'):dates('1952Y'); + +% Call the tested routine. +try + C = double(B); + t(1) = 1; +catch + t(1) = 0; +end + +% Define expected results. +E = [1950; 1951; 1952]; +if t(1) + t(2) = isequal(C,E); +end +T = all(t); +%@eof:3 -- GitLab