diff --git a/src/@dates/dates.m b/src/@dates/dates.m index a813b43ad90cf75b5879fba821c23f4be46dcc04..eb6e401ede6d95976846e76ca6ed623fed6b43e4 100644 --- a/src/@dates/dates.m +++ b/src/@dates/dates.m @@ -113,7 +113,7 @@ methods return end if isequal(nargin,4) && isfreq(varargin{1}) && isequal(varargin{1},365) - o.time = NaN(0,3); + o.time = NaN(0,2); if ischar(varargin{1}) o.freq = string2freq(varargin{1}); else @@ -123,7 +123,10 @@ methods if isnumeric(varargin{3}) && isvector(varargin{3}) && all(isint(varargin{3})) if isnumeric(varargin{4}) && isvector(varargin{4}) && all(isint(varargin{4})) if all(varargin{3}>=1) && all(varargin{3}<=12) && all(varargin{4}>=1) && all(varargin{3}<=31) - o.time = [varargin{2}(:), varargin{3}(:), varargin{4}(:)]; + if length(varargin{2})==length(varargin{3}) && length(varargin{2})==length(varargin{4}) + o.time = NaN(length(varargin{2}),2); + o.time(:,1) = datenum(varargin{2}(:), varargin{3}(:), varargin{4}(:)); + end else error('dates:ArgCheck','Third input must contain integers between 1 and %i.', o.freq) end @@ -174,9 +177,9 @@ end % classdef %$ d = dates(B1,B2,B3,B4); %$ %$ % Check the results. -%$ t(1) = dassert(d.time, e.time); -%$ t(2) = dassert(d.freq, e.freq); -%$ t(3) = dassert(d.ndat(), size(e.time, 1)); +%$ t(1) = isequal(d.time, e.time); +%$ t(2) = isequal(d.freq, e.freq); +%$ t(3) = isequal(d.ndat(), size(e.time, 1)); %$ T = all(t); %@eof:1 @@ -195,9 +198,9 @@ end % classdef %$ d = dates(B1,B2,B3,B4); %$ %$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat(), size(e.time, 1)); +%$ t(1) = isequal(d.time,e.time); +%$ t(2) = isequal(d.freq,e.freq); +%$ t(3) = isequal(d.ndat(), size(e.time, 1)); %$ T = all(t); %@eof:2 @@ -216,9 +219,9 @@ end % classdef %$ d = dates(B1,B2,B3,B4); %$ %$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat(), size(e.time, 1)); +%$ t(1) = isequal(d.time,e.time); +%$ t(2) = isequal(d.freq,e.freq); +%$ t(3) = isequal(d.ndat(), size(e.time, 1)); %$ T = all(t); %@eof:3 @@ -237,9 +240,9 @@ end % classdef %$ d = dates(B1,B2,B3,B4); %$ %$ % Check the results. -%$ t(1) = dassert(d.time, e.time); -%$ t(2) = dassert(d.freq, e.freq); -%$ t(3) = dassert(d.ndat(), size(e.time, 1)); +%$ t(1) = isequal(d.time, e.time); +%$ t(2) = isequal(d.freq, e.freq); +%$ t(3) = isequal(d.ndat(), size(e.time, 1)); %$ T = all(t); %@eof:4 @@ -251,14 +254,14 @@ end % classdef %$ % Call the tested routine. %$ d = B(2); %$ if isa(d,'dates') -%$ t(1) = 1; +%$ t(1) = true; %$ else -%$ t(1) = 0; +%$ t(1) = false; %$ end %$ %$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2]); +%$ t(2) = isequal(d.freq,B.freq); +%$ t(3) = isequal(d.time,[1950 2]); %$ end %$ T = all(t); %@eof:5 @@ -271,14 +274,14 @@ end % classdef %$ % Call the tested routine. %$ d = B(2); %$ if isa(d,'dates') -%$ t(1) = 1; +%$ t(1) = true; %$ else -%$ t(1) = 0; +%$ t(1) = false; %$ end %$ %$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2]); +%$ t(2) = isequal(d.freq,B.freq); +%$ t(3) = isequal(d.time,[1950 2]); %$ end %$ T = all(t); %@eof:6 @@ -290,14 +293,14 @@ end % classdef %$ % Call the tested routine. %$ d = B(2); %$ if isa(d,'dates') -%$ t(1) = 1; +%$ t(1) = true; %$ else -%$ t(1) = 0; +%$ t(1) = false; %$ end %$ %$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2]); +%$ t(2) = isequal(d.freq,B.freq); +%$ t(3) = isequal(d.time,[1950 2]); %$ end %$ T = all(t); %@eof:7 @@ -309,14 +312,14 @@ end % classdef %$ % Call the tested routine. %$ d = B(2); %$ if isa(d,'dates') -%$ t(1) = 1; +%$ t(1) = true; %$ else -%$ t(1) = 0; +%$ t(1) = false; %$ end %$ %$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2]); +%$ t(2) = isequal(d.freq,B.freq); +%$ t(3) = isequal(d.time,[1950 2]); %$ end %$ T = all(t); %@eof:8 @@ -324,9 +327,9 @@ end % classdef %@test:9 %$ try %$ B = dates(4,[1950; 1950], [1; 2]); -%$ t = 1; +%$ t = true; %$ catch -%$ t = 0; +%$ t = false; %$ end %$ %$ T = all(t); @@ -334,11 +337,11 @@ end % classdef %@test:10 %$ try -%$ B = dates(365,[1956, 1956], [1, 1], [12, 13]); -%$ t = 1; +%$ B = dates(365,[1956; 1956], [1; 1], [12; 13]); +%$ t = true; %$ catch -%$ t = 0; +%$ t = false; %$ end %$ %$ T = all(t); -%@eof:10 +%@eof:10 \ No newline at end of file diff --git a/src/utilities/convert/date2string.m b/src/utilities/convert/date2string.m index 9a94a8030ff6fa251d3bfbe39ab1131bf4afef64..0b985ede65cdf5169fda6fb93d2806ea1ba31bcb 100644 --- a/src/utilities/convert/date2string.m +++ b/src/utilities/convert/date2string.m @@ -3,14 +3,14 @@ function s = date2string(varargin) % --*-- Unitary tests --*-- % Returns date as a string. % % INPUTS -% o varargin{1} + dates object with one element, if nargin==1. -% + 1*3 vector of integers (first element is the year, second and third elements are the subperiods), if nargin==3. -% o varargin{2} integer scalar equal to 1, 2, 4, 12, 52 or 365 (frequency). +% - varargin{1} [dates] scalar, if nargin==1. +% [integer] 1×2 array, if nargin==2. +% - varargin{2} [integer] scalar, frequency (1, 2, 4, 12, or 365). % % OUTPUTS -% o s string. +% - s [char] 1×n array. -% Copyright (C) 2013-2020 Dynare Team +% Copyright © 2013-2020 Dynare Team % % This file is part of Dynare. % @@ -27,8 +27,8 @@ function s = date2string(varargin) % --*-- Unitary tests --*-- % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -if isequal(nargin,1) - if ~(isa(varargin{1},'dates') && isequal(length(varargin{1}),1)) +if isequal(nargin, 1) + if ~(isa(varargin{1}, 'dates') && isequal(length(varargin{1}), 1)) error(['dates::format: Input argument ' inputname(1) ' has to be a dates object with one element!']) else time = varargin{1}.time; @@ -36,20 +36,19 @@ if isequal(nargin,1) end end -if isequal(nargin,2) - if ~(isvector(varargin{1}) && (isequal(length(varargin{1}),2) || isequal(length(varargin{1}),3)) && all(isint(varargin{1})) && isscalar(varargin{2} && ismember(varargin{2},[1 2 4 12 52 365]))) - error(['dates::format: First input must be a 1*2 or 1*3 vector of integers and second input must be a scalar integer (1, 2, 4, 12, 52 or 365)!']) - else - if varargin{1}(2)>varargin{2} || varargin{1}(2)<1 - error('dates::format: Second element of the first input be between 1 and %s!',num2str(varargin{2})) - end - time = varargin{1}; - freq = varargin{2}; +if isequal(nargin, 2) + if ~isscalar(varargin{2}) || ~isint(varargin{2}) || ~ismember(varargin{2}, [1 2 4 12 365]) + error('Second input argument must be an integer scalar equal to 1, 2, 4, 12, or 365 (frequency).') + end + freq = varargin{2}; + if ~isnumeric(varargin{1}) || ~isrow(varargin{1}) || ~all(isint(varargin{1}(~isnan(varargin{1})))) || ~isequal(length(varargin{1}), 2) + error('First input must be a 1*2 array of integers.') end + time = varargin{1}; end -if freq == 365 - s = [num2str(time(1),'%02d') '-' num2str(time(2),'%02d') '-' num2str(time(3),'%02d')]; +if freq==365 + s = datestr(time(1), 'yyyy-mm-dd'); else s = [num2str(time(1)) freq2string(freq)]; if freq>1 @@ -57,99 +56,86 @@ else end end +return + %@test:1 -%$ try -%$ str = date2string(dates('1938Q4')); -%$ t(1) = true; -%$ catch -%$ t(1) = false; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(str, '1938Q4'); -%$ end -%$ -%$ T = all(t); +try + str = date2string(dates('1938Q4')); + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(str, '1938Q4'); +end + +T = all(t); %@eof:1 %@test:2 -%$ try -%$ str = date2string(dates('1938Q4','1945Q3')); -%$ t(1) = false; -%$ catch -%$ t(1) = true; -%$ end -%$ -%$ T = all(t); +try + str = date2string(dates('1938Q4','1945Q3')); + t(1) = false; +catch + t(1) = true; +end + +T = all(t); %@eof:2 %@test:3 -%$ try -%$ str = date2string([1938, 11], 12); -%$ t(1) = true; -%$ catch -%$ t(1) = false; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(str, '1938M11'); -%$ end -%$ -%$ T = all(t); +try + str = date2string([1938, 11], 12); + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(str, '1938M11'); +end + +T = all(t); %@eof:3 %@test:4 -%$ try -%$ str = date2string([1938; 11], 12); -%$ t(1) = true; -%$ catch -%$ t(1) = false; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(str, '1938M11'); -%$ end -%$ -%$ T = all(t); +try + str = date2string([1938, 11], 4); + t(1) = false; +catch + t(1) = true; +end + +T = all(t); %@eof:4 %@test:5 -%$ try -%$ str = date2string([1938; 11], 4); -%$ t(1) = false; -%$ catch -%$ t(1) = true; -%$ end -%$ -%$ T = all(t); +try + str = date2string([1938, 2], 2); + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(str, '1938H2'); +end + +T = all(t); %@eof:5 %@test:6 -%$ try -%$ str = date2string([1938; 2], 2); -%$ t(1) = true; -%$ catch -%$ t(1) = false; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(str, '1938H2'); -%$ end -%$ -%$ T = all(t); -%@eof:6 - -%@test:7 -%$ try -%$ str = date2string([1938; 1; 12], 365); -%$ t(1) = true; -%$ catch -%$ t(1) = false; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(str, '1938-01-12'); -%$ end -%$ -%$ T = all(t); -%@eof:7 +try + str = date2string([707852, NaN], 365); + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(str, '1938-01-12'); +end + +T = all(t); +%@eof:6 \ No newline at end of file