From c21b3bd22ae5391efa93253805dd2d64b6b52145 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= <stepan@adjemian.eu> Date: Thu, 13 May 2021 16:07:32 +0200 Subject: [PATCH] Fix concatenation with empty dates objects. Concatenation was failing if the empty object had no frequency set. Closes #46 --- src/@dates/horzcat.m | 198 +++++++++++++++++++++++++------------------ 1 file changed, 117 insertions(+), 81 deletions(-) diff --git a/src/@dates/horzcat.m b/src/@dates/horzcat.m index a6b6333..4b42a48 100644 --- a/src/@dates/horzcat.m +++ b/src/@dates/horzcat.m @@ -30,7 +30,11 @@ end o = copy(varargin{1}); for i=2:nargin p = varargin{i}; - if isequal(o.freq, p.freq) + if isequal(o.freq, p.freq) || isempty(o.freq) || isempty(p.freq) + if isempty(o) + o = copy(p); + continue + end if ~isempty(p) o.time = [o.time; p.time]; end @@ -39,94 +43,126 @@ for i=2:nargin end end +return + %@test:1 -%$ % Define some dates -%$ B1 = '1953Q4'; -%$ B2 = '1950Q2'; -%$ B3 = '1950Q1'; -%$ B4 = '1945Q3'; -%$ B5 = '2009Q2'; -%$ -%$ % Define expected results. -%$ e.time = [1945*4+3; 1950*4+1; 1950*4+2; 1953*4+4; 2009*4+2]; -%$ e.freq = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B4,B3,B2,B1); -%$ d = [d, dates(B5)]; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = size(e.time,1)==d.ndat(); -%$ T = all(t); +% Define some dates +B1 = '1953Q4'; +B2 = '1950Q2'; +B3 = '1950Q1'; +B4 = '1945Q3'; +B5 = '2009Q2'; + +% Define expected results. +e.time = [1945*4+3; 1950*4+1; 1950*4+2; 1953*4+4; 2009*4+2]; +e.freq = 4; + +% Call the tested routine. +d = dates(B4,B3,B2,B1); +d = [d, dates(B5)]; + +% Check the results. +t(1) = dassert(d.time,e.time); +t(2) = dassert(d.freq,e.freq); +t(3) = size(e.time,1)==d.ndat(); +T = all(t); %@eof:1 %@test:2 -%$ % Define some dates -%$ B1 = '1953Q4'; -%$ B2 = '1950Q2'; -%$ B3 = '1950Q1'; -%$ B4 = '1945Q3'; -%$ B5 = '2009Q2'; -%$ -%$ % Define expected results. -%$ e.time = [1945*4+3; 1950*4+1; 1950*4+2; 1953*4+4; 2009*4+2]; -%$ e.freq = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B4,B3,B2); -%$ d = [d, dates(B1), dates(B5)]; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = size(e.time,1)==d.ndat(); -%$ T = all(t); +% Define some dates +B1 = '1953Q4'; +B2 = '1950Q2'; +B3 = '1950Q1'; +B4 = '1945Q3'; +B5 = '2009Q2'; + +% Define expected results. +e.time = [1945*4+3; 1950*4+1; 1950*4+2; 1953*4+4; 2009*4+2]; +e.freq = 4; + +% Call the tested routine. +d = dates(B4,B3,B2); +d = [d, dates(B1), dates(B5)]; + +% Check the results. +t(1) = dassert(d.time,e.time); +t(2) = dassert(d.freq,e.freq); +t(3) = size(e.time,1)==d.ndat(); +T = all(t); %@eof:2 %@test:3 -%$ % Define some dates -%$ B1 = '1953Q4'; -%$ B2 = '1950Q2'; -%$ B3 = '1950Q1'; -%$ B4 = '1945Q3'; -%$ B5 = '2009Q2'; -%$ -%$ % Define expected results. -%$ e.time = [1945*4+3; 1950*4+1; 1950*4+2; 1953*4+4; 2009*4+2]; -%$ e.freq = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B4,B3,B2); -%$ d = [d, dates(B1,B5)]; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = size(e.time,1)==d.ndat(); -%$ T = all(t); +% Define some dates +B1 = '1953Q4'; +B2 = '1950Q2'; +B3 = '1950Q1'; +B4 = '1945Q3'; +B5 = '2009Q2'; + +% Define expected results. +e.time = [1945*4+3; 1950*4+1; 1950*4+2; 1953*4+4; 2009*4+2]; +e.freq = 4; + +% Call the tested routine. +d = dates(B4,B3,B2); +d = [d, dates(B1,B5)]; + +% Check the results. +t(1) = dassert(d.time,e.time); +t(2) = dassert(d.freq,e.freq); +t(3) = size(e.time,1)==d.ndat(); +T = all(t); %@eof:3 %@test:4 -%$ % Define some dates -%$ B1 = '1953Q4'; -%$ B2 = '1950Q2'; -%$ B3 = '1950Q1'; -%$ B4 = '1945Q3'; -%$ B5 = '2009Q2'; -%$ -%$ % Define expected results. -%$ e.time = [1945*4+3; 1950*4+1; 1950*4+2; 1953*4+4; 2009*4+2]; -%$ e.freq = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B4,B3,B2); -%$ d = [d, [dates(B1), dates(B5)]]; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = size(e.time,1)==d.ndat(); -%$ T = all(t); +% Define some dates +B1 = '1953Q4'; +B2 = '1950Q2'; +B3 = '1950Q1'; +B4 = '1945Q3'; +B5 = '2009Q2'; + +% Define expected results. +e.time = [1945*4+3; 1950*4+1; 1950*4+2; 1953*4+4; 2009*4+2]; +e.freq = 4; + +% Call the tested routine. +d = dates(B4,B3,B2); +d = [d, [dates(B1), dates(B5)]]; + +% Check the results. +t(1) = dassert(d.time,e.time); +t(2) = dassert(d.freq,e.freq); +t(3) = size(e.time,1)==d.ndat(); +T = all(t); %@eof:4 + +%@test:5 +try + e = [dates('1938M11') dates()]; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = e==dates('1938M11'); +end + +T = all(t); +%@eof:5 + +%@test:6 +try + e = [dates() dates('1938M11')]; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = e==dates('1938M11'); +end + +T = all(t); +%@eof:6 \ No newline at end of file -- GitLab