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