diff --git a/src/@dates/eq.m b/src/@dates/eq.m index 58ef96b7a062047fa3ecc9c05c232762d0cb855a..d83d5da8e2750d0604a665d5576d7e92f67824e5 100644 --- a/src/@dates/eq.m +++ b/src/@dates/eq.m @@ -9,7 +9,7 @@ function l = eq(varargin) % --*-- Unitary tests --*-- % OUTPUTS % - l [logical] column vector of max(n,1) elements (zeros or ones). -% Copyright (C) 2013-2015 Dynare Team +% Copyright © 2013-2020 Dynare Team % % This code is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by @@ -32,59 +32,92 @@ end [o, p] = comparison_arg_checks(varargin{:}); if isequal(o.ndat(), p.ndat()) - l = logical(transpose(all(transpose(eq(o.time,p.time))))); + if o.freq==365 + l = logical(transpose(all(transpose(eq(o.time(:,1),p.time(:,1)))))); + else + l = logical(transpose(all(transpose(eq(o.time,p.time))))); + end else - l = logical(transpose(all(transpose(bsxfun(@eq,o.time,p.time))))); + if o.freq==365 + l = logical(transpose(all(transpose(bsxfun(@eq,o.time(:,1),p.time(:,1)))))); + else + l = logical(transpose(all(transpose(bsxfun(@eq,o.time,p.time))))); + end end +return + %@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; -%$ d2 = dates('1960Q1','1960Q2','1960Q3','1960Q4') ; -%$ d3 = dates('1950Q1','1960Q2','1950Q3','1960Q4') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1==d1; -%$ t2 = d1==d2; -%$ t3 = d1==d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,true(4,1)); -%$ t(2) = dassert(t2,false(4,1)); -%$ t(2) = dassert(t3,[true; false; true; false]); -%$ T = all(t); +% Define some dates objects +d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; +d2 = dates('1960Q1','1960Q2','1960Q3','1960Q4') ; +d3 = dates('1950Q1','1960Q2','1950Q3','1960Q4') ; + +% Call the tested routine. +try + t1 = d1==d1; + t2 = d1==d2; + t3 = d1==d3; + t(1) = true; +catch + t(1) = false; +end + +% Check the results. +if t(1) + t(2) = isequal(t1, true(4,1)); + t(3) = isequal(t2, false(4,1)); + t(4) = isequal(t3, [true; false; true; false]); +end +T = all(t); %@eof:1 %@test:2 -%$ % Define some dates objects -%$ d1 = dates('1950Q1') ; -%$ d2 = dates('1960Q1') ; -%$ d3 = dates('1960Q1') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1==d1; -%$ t2 = d1==d2; -%$ t3 = d1==d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,true); -%$ t(2) = dassert(t2,false); -%$ t(2) = dassert(t3,false); -%$ T = all(t); +% Define some dates objects +d1 = dates('1950Q1') ; +d2 = dates('1960Q1') ; +d3 = dates('1960Q1') ; + +% Call the tested routine. +try + t1 = d1==d1; + t2 = d1==d2; + t3 = d1==d3; + t(1) = true; +catch + t(1) = false; +end + +% Check the results. +if t(1) + t(2) = t1; + t(3) = ~t2; + t(4) = ~t3; +end + +T = all(t); %@eof:2 %@test:3 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; -%$ d2 = dates('1950Q2') ; -%$ d3 = dates('1970Q1') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1==d2; -%$ t2 = d1==d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,[false; true; false; false]); -%$ t(2) = dassert(t2,false(4,1)); -%$ T = all(t); -%@eof:3 +% Define some dates objects +d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; +d2 = dates('1950Q2') ; +d3 = dates('1970Q1') ; + +% Call the tested routine. +try + t1 = d1==d2; + t2 = d1==d3; + t(1) = true; +catch + t(1) = false; +end + +% Check the results. +if t(1) + t(2) = isequal(t1, [false; true; false; false]); + t(3) = isequal(t2, false(4,1)); +end + +T = all(t); +%@eof:3 \ No newline at end of file diff --git a/src/@dates/minus.m b/src/@dates/minus.m index 20f21a45a23a8e6a72723b454324aade125a9ab5..822479d2bdf8f597723d07582aaa64c56c0a616b 100644 --- a/src/@dates/minus.m +++ b/src/@dates/minus.m @@ -7,7 +7,7 @@ function q = minus(o,p) % --*-- Unitary tests --*-- % % INPUTS % - o [dates] -% - p [dates or integer] +% - p [dates,integer] % % OUTPUTS % - q [dates] @@ -18,7 +18,7 @@ function q = minus(o,p) % --*-- Unitary tests --*-- % p periods backward. % 3. If o is not a dates object, an error is returned. -% Copyright (C) 2013-2017 Dynare Team +% Copyright © 2013-2020 Dynare Team % % This code is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by @@ -54,7 +54,11 @@ if isa(o,'dates') && isa(p,'dates') q = zeros(u.length(),1); id = find(~(u==v)); if ~isempty(id) - q(id) = u.time(id,2)-v.time(id,2) + (u.time(id,1)-v.time(id,1))*v.freq; + if o.freq==365 + q(id) = u.time(id,1)-v.time(id,1); + else + q(id) = u.time(id,2)-v.time(id,2) + (u.time(id,1)-v.time(id,1))*v.freq; + end end elseif isa(o,'dates') && ~isa(p,'dates') if (isvector(p) && isequal(length(p),o.ndat()) && all(isint(p))) || (isscalar(p) && isint(p)) || (isequal(o.length(),1) && isvector(p) && all(isint(p))) @@ -68,102 +72,140 @@ else error('dates:minus:ArgCheck','You should read the manual.') end +return + %@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2','1960Q1'); -%$ d2 = dates('1950Q3','1950Q4','1960Q1'); -%$ d3 = dates('2000Q1'); -%$ d4 = dates('2002Q2'); -%$ % Call the tested routine. -%$ try -%$ e1 = d2-d1; -%$ e2 = d4-d3; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,[2; 2; 0]); -%$ t(3) = dassert(e2,9); -%$ end -%$ T = all(t); +% Define some dates objects +d1 = dates('1950Q1','1950Q2','1960Q1'); +d2 = dates('1950Q3','1950Q4','1960Q1'); +d3 = dates('2000Q1'); +d4 = dates('2002Q2'); +% Call the tested routine. +try + e1 = d2-d1; + e2 = d4-d3; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(e1,[2; 2; 0]); + t(3) = isequal(e2,9); +end +T = all(t); %@eof:1 %@test:2 -%$ % Define some dates objects -%$ d1 = dates('1950Y','1951Y','1953Y'); -%$ d2 = dates('1951Y','1952Y','1953Y'); -%$ d3 = dates('2000Y'); -%$ d4 = dates('1999Y'); -%$ % Call the tested routine. -%$ try -%$ e1 = d2-d1; -%$ e2 = d4-d3; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,[1; 1; 0]); -%$ t(3) = dassert(e2,-1); -%$ end -%$ T = all(t); +% Define some dates objects +d1 = dates('1950Y','1951Y','1953Y'); +d2 = dates('1951Y','1952Y','1953Y'); +d3 = dates('2000Y'); +d4 = dates('1999Y'); +% Call the tested routine. +try + e1 = d2-d1; + e2 = d4-d3; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(e1,[1; 1; 0]); + t(3) = isequal(e2,-1); +end +T = all(t); %@eof:2 %@test:3 -%$ % Define some dates objects -%$ d1 = dates('2000Y'); -%$ d2 = dates('1999Y'); -%$ % Call the tested routine. -%$ try -%$ e1 = d1-1; -%$ e2 = d2-(-1); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,d2); -%$ t(3) = dassert(e2,d1); -%$ end -%$ T = all(t); +% Define some dates objects +d1 = dates('2000Y'); +d2 = dates('1999Y'); +% Call the tested routine. +try + e1 = d1-1; + e2 = d2-(-1); + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(e1,d2); + t(3) = isequal(e2,d1); +end +T = all(t); %@eof:3 %@test:4 -%$ % Define some dates objects -%$ d1 = dates('2000Q1'); -%$ e1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4'); -%$ % Call the tested routine. -%$ try -%$ f1 = d1-transpose(1:5); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,f1); -%$ end -%$ T = all(t); +% Define some dates objects +d1 = dates('2000Q1'); +e1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4'); +% Call the tested routine. +try + f1 = d1-transpose(1:5); + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(e1,f1); +end +T = all(t); %@eof:4 %@test:5 -%$ % Define some dates objects -%$ d1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4'); -%$ e1 = dates('2000Q1')*5; -%$ % Call the tested routine. -%$ try -%$ f1 = d1-(-transpose(1:5)); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,f1); -%$ end -%$ T = all(t); +% Define some dates objects +d1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4'); +e1 = dates('2000Q1')*5; +% Call the tested routine. +try + f1 = d1-(-transpose(1:5)); + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(e1,f1); +end +T = all(t); %@eof:5 + +%@test:6 +% Define some dates objects +d1 = dates('2020-01-02'); +d2 = dates('2020-01-01','2019-12-31'); +% Call the tested routine. +try + delta = d1-d2; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal([1;2], delta); +end +T = all(t); +%@eof:6 + +%@test:7 +% Define some dates objects +d1 = dates('2000-03-02'); +e2 = [1; 2]; +% Call the tested routine. +try + d2 = d1-e2; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(dates('2000-03-01', '2000-02-29'), d2); +end +T = all(t); +%@eof:7 diff --git a/src/@dates/plus.m b/src/@dates/plus.m index 281045af30a679102ad8fa39043007befe2997e0..e6a52b1afaa2ad98c585bdabb3fabfb2d206eb10 100644 --- a/src/@dates/plus.m +++ b/src/@dates/plus.m @@ -1,10 +1,10 @@ -function q = plus(o,p) % --*-- Unitary tests --*-- +function q = plus(o, p) % --*-- Unitary tests --*-- % Overloads the plus (+) binary operator. % % INPUTS -% - o [dates or integer] -% - p [dates or integer] +% - o [dates,integer] +% - p [dates,integer] % % OUTPUTS % - q [dates] @@ -14,7 +14,7 @@ function q = plus(o,p) % --*-- Unitary tests --*-- % 2. If one of the inputs is an integer or a vector of integers, the method shifts the dates % object by X (the interger input) periods forward. -% Copyright (C) 2013-2017 Dynare Team +% Copyright © 2013-2020 Dynare Team % % This code is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ function q = plus(o,p) % --*-- Unitary tests --*-- if isa(o,'dates') && isa(p,'dates') % Concatenate dates objects without removing repetitions if o and p are not disjoint sets of dates. - if ~isequal(o.freq,p.freq) + if ~isequal(o.freq, p.freq) error('dates:plus:ArgCheck','Input arguments must have common frequency!') end if isempty(p) @@ -65,86 +65,113 @@ else error('dates:plus:ArgCheck','Please read the manual.') end +return + %@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2') ; -%$ d2 = dates('1950Q3','1950Q4') ; -%$ d3 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; -%$ -%$ % Call the tested routine. -%$ try -%$ e1 = d1+d2; -%$ e2 = d1+d2+d3; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,d3); -%$ t(3) = dassert(e2,dates('1950Q1','1950Q2','1950Q3','1950Q4','1950Q1','1950Q2','1950Q3','1950Q4')); -%$ end -%$ T = all(t); +% Define some dates objects +d1 = dates('1950Q1','1950Q2') ; +d2 = dates('1950Q3','1950Q4') ; +d3 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; + +% Call the tested routine. +try + e1 = d1+d2; + e2 = d1+d2+d3; + t(1) = 1; +catch + t(1) = 0; +end + +if t(1) + t(2) = dassert(e1,d3); + t(3) = dassert(e2,dates('1950Q1','1950Q2','1950Q3','1950Q4','1950Q1','1950Q2','1950Q3','1950Q4')); +end +T = all(t); %@eof:1 %@test:2 -%$ % Define some dates objects -%$ d1 = dates('1950Q1'); -%$ e1 = dates('1950Q2'); -%$ e2 = dates('1950Q3'); -%$ e3 = dates('1950Q4'); -%$ e4 = dates('1951Q1'); -%$ e5 = dates('1950Q2','1950Q3','1950Q4','1951Q1'); -%$ -%$ % Call the tested routine. -%$ try -%$ f1 = d1+1; -%$ f2 = d1+2; -%$ f3 = d1+3; -%$ f4 = d1+4; -%$ f5 = d1+transpose(1:4); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,f1); -%$ t(3) = dassert(e2,f2); -%$ t(4) = dassert(e3,f3); -%$ t(5) = dassert(e4,f4); -%$ t(6) = dassert(e5,f5); -%$ end -%$ T = all(t); +% Define some dates objects +d1 = dates('1950Q1'); +e1 = dates('1950Q2'); +e2 = dates('1950Q3'); +e3 = dates('1950Q4'); +e4 = dates('1951Q1'); +e5 = dates('1950Q2','1950Q3','1950Q4','1951Q1'); + +% Call the tested routine. +try + f1 = d1+1; + f2 = d1+2; + f3 = d1+3; + f4 = d1+4; + f5 = d1+transpose(1:4); + t(1) = 1; +catch + t(1) = 0; +end + +if t(1) + t(2) = dassert(e1,f1); + t(3) = dassert(e2,f2); + t(4) = dassert(e3,f3); + t(5) = dassert(e4,f4); + t(6) = dassert(e5,f5); +end +T = all(t); %@eof:2 %@test:3 -%$ % Define some dates objects -%$ d1 = dates('1950Q1'); -%$ e1 = dates('1949Q4'); -%$ e2 = dates('1949Q3'); -%$ e3 = dates('1949Q2'); -%$ e4 = dates('1949Q1'); -%$ e5 = dates('1948Q4'); -%$ -%$ % Call the tested routine. -%$ try -%$ f1 = d1+(-1); -%$ f2 = d1+(-2); -%$ f3 = d1+(-3); -%$ f4 = d1+(-4); -%$ f5 = d1+(-5); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,f1); -%$ t(3) = dassert(e2,f2); -%$ t(4) = dassert(e3,f3); -%$ t(5) = dassert(e4,f4); -%$ t(6) = dassert(e5,f5); -%$ end -%$ T = all(t); +% Define some dates objects +d1 = dates('1950Q1'); +e1 = dates('1949Q4'); +e2 = dates('1949Q3'); +e3 = dates('1949Q2'); +e4 = dates('1949Q1'); +e5 = dates('1948Q4'); + +% Call the tested routine. +try + f1 = d1+(-1); + f2 = d1+(-2); + f3 = d1+(-3); + f4 = d1+(-4); + f5 = d1+(-5); + t(1) = 1; +catch + t(1) = 0; +end + +if t(1) + t(2) = dassert(e1,f1); + t(3) = dassert(e2,f2); + t(4) = dassert(e3,f3); + t(5) = dassert(e4,f4); + t(6) = dassert(e5,f5); +end +T = all(t); %@eof:3 + +%@test:4 +% Define some dates objects +d1 = dates('2000-12-31'); +d2 = dates('2000-02-29'); +d3 = dates('2001-02-28'); + +% Call the tested routine. +try + f1 = d1+1; + f2 = d2+1; + f3 = d3+1; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(char(f1), '2001-01-01'); + t(3) = isequal(char(f2), '2000-03-01'); + t(4) = isequal(char(f3), '2001-03-01'); +end +T = all(t); +%@eof:4 + diff --git a/src/@dates/uminus.m b/src/@dates/uminus.m index 840592182f6524fe154a18d225b233e549e35452..c2d0e8dcdeeacde0efff35a3aeba6eb0c1803a5b 100644 --- a/src/@dates/uminus.m +++ b/src/@dates/uminus.m @@ -8,7 +8,7 @@ function o = uminus(o) % --*-- Unitary tests --*-- % OUTPUTS % - o [dates] -% Copyright (C) 2013-2017 Dynare Team +% Copyright © 2013-2020 Dynare Team % % This code is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by @@ -23,53 +23,77 @@ function o = uminus(o) % --*-- 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/>. -o.time(:,2) = o.time(:,2)-1; -idx = find(o.time(:,2)==0); -o.time(idx,1) = o.time(idx,1)-1; -o.time(idx,2) = o.freq; +if o.freq==365 + o.time(:,1) = o.time(:,1)-1; +else + o.time(:,2) = o.time(:,2)-1; + idx = find(o.time(:,2)==0); + o.time(idx,1) = o.time(idx,1)-1; + o.time(idx,2) = o.freq; +end + +return %@test:1 -%$ % Define some dates -%$ date_1 = '1950Y'; -%$ date_2 = '1950Q2'; -%$ date_3 = '1950Q1'; -%$ date_4 = '1950M2'; -%$ date_5 = '1950M1'; -%$ -%$ % Call the tested routine. -%$ d1 = dates(date_1); -d1; -%$ d2 = dates(date_2); -d2; -%$ d3 = dates(date_3); -d3; -%$ d4 = dates(date_4); -d4; -%$ d5 = dates(date_5); -d5; -%$ i1 = (d1==dates('1949Y')); -%$ i2 = (d2==dates('1950Q1')); -%$ i3 = (d3==dates('1949Q4')); -%$ i4 = (d4==dates('1950M1')); -%$ i5 = (d5==dates('1949M12')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i1,true); -%$ t(2) = dassert(i2,true); -%$ t(3) = dassert(i3,true); -%$ t(4) = dassert(i4,true); -%$ t(5) = dassert(i5,true); -%$ T = all(t); +% Define some dates +date_1 = '1950Y'; +date_2 = '1950Q2'; +date_3 = '1950Q1'; +date_4 = '1950M2'; +date_5 = '1950M1'; + +% Call the tested routine. +try + d1 = dates(date_1); -d1; + d2 = dates(date_2); -d2; + d3 = dates(date_3); -d3; + d4 = dates(date_4); -d4; + d5 = dates(date_5); -d5; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = (d1==dates('1949Y')); + t(3) = (d2==dates('1950Q1')); + t(4) = (d3==dates('1949Q4')); + t(5) = (d4==dates('1950M1')); + t(6) = (d5==dates('1949M12')); +end +T = all(t); %@eof:1 %@test:2 -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1'); -%$ d2 = dates('1949Q4','1950Q1','1950Q2','1950Q3','1950Q4'); -%$ try -%$ -d1; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(all(d2==d1),true); -%$ end -%$ -%$ T = all(t); -%@eof:2 \ No newline at end of file +d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1'); +d2 = dates('1949Q4','1950Q1','1950Q2','1950Q3','1950Q4'); +try + -d1; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(d2==d1); +end + +T = all(t); +%@eof:2 + +%@test:3 +d1 = dates('2000-01-01'); +d2 = dates('1999-12-31'); +try + -d1; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = (d2==d1); +end + +T = all(t); +%@eof:3 \ No newline at end of file diff --git a/src/@dates/uplus.m b/src/@dates/uplus.m index 23bd48da0a7642fd2ebf0948460263c9038a4281..b185f438e1cadc158c3bf41db5864ab3d5296358 100644 --- a/src/@dates/uplus.m +++ b/src/@dates/uplus.m @@ -8,7 +8,7 @@ function o = uplus(o) % --*-- Unitary tests --*-- % OUTPUTS % - o [dates] -% Copyright (C) 2013-2017 Dynare Team +% Copyright © 2013-2020 Dynare Team % % This code is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by @@ -23,53 +23,79 @@ function o = uplus(o) % --*-- 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 o.freq==365 + o.time(:,1) = o.time(:,1)+1; + return +end + o.time(:,2) = o.time(:,2)+1; idx = find(o.time(:,2)>o.freq); % Happy new year! o.time(idx,1) = o.time(idx,1)+1; o.time(idx,2) = 1; +return + %@test:1 -%$ % Define some dates -%$ date_1 = '1950Y'; -%$ date_2 = '1950Q2'; -%$ date_3 = '1950Q4'; -%$ date_4 = '1950M2'; -%$ date_5 = '1950M12'; -%$ -%$ % Call the tested routine. -%$ d1 = dates(date_1); +d1; -%$ d2 = dates(date_2); +d2; -%$ d3 = dates(date_3); +d3; -%$ d4 = dates(date_4); +d4; -%$ d5 = dates(date_5); +d5; -%$ i1 = (d1==dates('1951Y')); -%$ i2 = (d2==dates('1950Q3')); -%$ i3 = (d3==dates('1951Q1')); -%$ i4 = (d4==dates('1950M3')); -%$ i5 = (d5==dates('1951M1')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i1,true); -%$ t(2) = dassert(i2,true); -%$ t(3) = dassert(i3,true); -%$ t(4) = dassert(i4,true); -%$ t(5) = dassert(i5,true); -%$ T = all(t); +% Define some dates +date_1 = '1950Y'; +date_2 = '1950Q2'; +date_3 = '1950Q4'; +date_4 = '1950M2'; +date_5 = '1950M12'; + +% Call the tested routine. +try + d1 = dates(date_1); +d1; + d2 = dates(date_2); +d2; + d3 = dates(date_3); +d3; + d4 = dates(date_4); +d4; + d5 = dates(date_5); +d5; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = (d1==dates('1951Y')); + t(3) = (d2==dates('1950Q3')); + t(4) = (d3==dates('1951Q1')); + t(5) = (d4==dates('1950M3')); + t(6) = (d5==dates('1951M1')); +end + +T = all(t); %@eof:1 %@test:2 -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1'); -%$ d2 = dates('1950Q2','1950Q3','1950Q4','1951Q1','1951Q2'); -%$ try -%$ +d1; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(all(d2==d1),true); -%$ end -%$ -%$ T = all(t); -%@eof:2 \ No newline at end of file +d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1'); +d2 = dates('1950Q2','1950Q3','1950Q4','1951Q1','1951Q2'); +try + +d1; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(d2, d1); +end + +T = all(t); +%@eof:2 + +%@test:3 +d1 = dates('2001-02-27','2001-02-28','2001-12-31'); +d2 = dates('2001-02-28','2001-03-01','2002-01-01'); +try + +d1; + t(1) = true; +catch + t(1) = false; +end + +if t(1) + t(2) = isequal(d2, d1); +end + +T = all(t); +%@eof:3 \ No newline at end of file diff --git a/src/utilities/op/add_periods_to_array_of_dates.m b/src/utilities/op/add_periods_to_array_of_dates.m index 6a2171a164b34c713e5c002a8e85d679bfb8b5e6..0d48b2038affd7479b69d00c6f57bbb46d4ef268 100644 --- a/src/utilities/op/add_periods_to_array_of_dates.m +++ b/src/utilities/op/add_periods_to_array_of_dates.m @@ -2,7 +2,7 @@ function time = add_periods_to_array_of_dates(time, freq, p) % --*-- Unitary te % Adds a p periods (p can be negative) to a date (or a set of dates) characterized by array time and frequency freq. -% Copyright (C) 2013-2017 Dynare Team +% Copyright © 2013-2020 Dynare Team % % This file is part of Dynare. % @@ -23,6 +23,11 @@ if isequal(rows(time),1) && length(p)>1 time = repmat(time,length(p),1); end +if freq==365 + time(:,1) = time(:,1) + p; + return +end + time(:,1) = time(:,1) + fix(p/freq); time(:,2) = time(:,2) + rem(p,freq); @@ -38,46 +43,48 @@ if ~isempty(id2) time(id2,2) = time(id2,2) + freq; end +return + %@test:1 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, 1),[1950 2]); -%$ t(2) = dassert(add_periods_to_array_of_dates([1950 1], 4, 2),[1950 3]); -%$ t(3) = dassert(add_periods_to_array_of_dates([1950 1], 4, 3),[1950 4]); -%$ t(4) = dassert(add_periods_to_array_of_dates([1950 1], 4, 4),[1951 1]); -%$ t(5) = dassert(add_periods_to_array_of_dates([1950 1], 4, 5),[1951 2]); -%$ t(6) = dassert(add_periods_to_array_of_dates([1950 1], 4, 6),[1951 3]); -%$ t(7) = dassert(add_periods_to_array_of_dates([1950 1], 4, 7),[1951 4]); -%$ t(8) = dassert(add_periods_to_array_of_dates([1950 1], 4, 8),[1952 1]); -%$ T = all(t); +t(1) = isequal(add_periods_to_array_of_dates([1950 1], 4, 1),[1950 2]); +t(2) = isequal(add_periods_to_array_of_dates([1950 1], 4, 2),[1950 3]); +t(3) = isequal(add_periods_to_array_of_dates([1950 1], 4, 3),[1950 4]); +t(4) = isequal(add_periods_to_array_of_dates([1950 1], 4, 4),[1951 1]); +t(5) = isequal(add_periods_to_array_of_dates([1950 1], 4, 5),[1951 2]); +t(6) = isequal(add_periods_to_array_of_dates([1950 1], 4, 6),[1951 3]); +t(7) = isequal(add_periods_to_array_of_dates([1950 1], 4, 7),[1951 4]); +t(8) = isequal(add_periods_to_array_of_dates([1950 1], 4, 8),[1952 1]); +T = all(t); %@eof:1 %@test:2 -%$ t(1) = dassert(add_periods_to_array_of_dates(repmat([1950 1],8,1), 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]); -%$ T = all(t); +t(1) = isequal(add_periods_to_array_of_dates(repmat([1950 1],8,1), 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]); +T = all(t); %@eof:2 %@test:3 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 1, 1),[1951 1]); -%$ T = all(t); +t(1) = isequal(add_periods_to_array_of_dates([1950 1], 1, 1),[1951 1]); +T = all(t); %@eof:3 %@test:4 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1; 1950 2; 1950 3; 1950 4], 4, 1),[1950 2; 1950 3; 1950 4; 1951 1]); -%$ T = all(t); +t(1) = isequal(add_periods_to_array_of_dates([1950 1; 1950 2; 1950 3; 1950 4], 4, 1),[1950 2; 1950 3; 1950 4; 1951 1]); +T = all(t); %@eof:4 %@test:5 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]); -%$ T = all(t); +t(1) = isequal(add_periods_to_array_of_dates([1950 1], 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]); +T = all(t); %@eof:5 %@test:6 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, -1),[1949 4]); -%$ t(2) = dassert(add_periods_to_array_of_dates([1950 1], 4, -2),[1949 3]); -%$ t(3) = dassert(add_periods_to_array_of_dates([1950 1], 4, -3),[1949 2]); -%$ t(4) = dassert(add_periods_to_array_of_dates([1950 1], 4, -4),[1949 1]); -%$ t(5) = dassert(add_periods_to_array_of_dates([1950 1], 4, -5),[1948 4]); -%$ t(6) = dassert(add_periods_to_array_of_dates([1950 1], 4, -6),[1948 3]); -%$ t(7) = dassert(add_periods_to_array_of_dates([1950 1], 4, -7),[1948 2]); -%$ t(8) = dassert(add_periods_to_array_of_dates([1950 1], 4, -8),[1948 1]); -%$ T = all(t); +t(1) = isequal(add_periods_to_array_of_dates([1950 1], 4, -1),[1949 4]); +t(2) = isequal(add_periods_to_array_of_dates([1950 1], 4, -2),[1949 3]); +t(3) = isequal(add_periods_to_array_of_dates([1950 1], 4, -3),[1949 2]); +t(4) = isequal(add_periods_to_array_of_dates([1950 1], 4, -4),[1949 1]); +t(5) = isequal(add_periods_to_array_of_dates([1950 1], 4, -5),[1948 4]); +t(6) = isequal(add_periods_to_array_of_dates([1950 1], 4, -6),[1948 3]); +t(7) = isequal(add_periods_to_array_of_dates([1950 1], 4, -7),[1948 2]); +t(8) = isequal(add_periods_to_array_of_dates([1950 1], 4, -8),[1948 1]); +T = all(t); %@eof:6 \ No newline at end of file