Improve speed of @dates/colon method (added specialized version of add_periods_to_array_of_dates -> add_periods_to_date).
parent
cf86c8f721
commit
cf43c90347
|
@ -77,7 +77,7 @@ C.time = NaN(n,2);
|
|||
C.time(1,:) = A.time;
|
||||
|
||||
for linee=2:n
|
||||
C.time(linee,:) = add_periods_to_array_of_dates(C.time(linee-1,:), C.freq, d);
|
||||
C.time(linee,:) = add_periods_to_date(C.time(linee-1,:), C.freq, d) ;%add_periods_to_array_of_dates(C.time(linee-1,:), C.freq, d);
|
||||
end
|
||||
|
||||
%@test:1
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
function time = add_periods_to_date(time, freq, p) % --*-- Unitary tests --*--
|
||||
|
||||
% 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 Dynare Team
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
time(1) = time(1) + fix(p/freq);
|
||||
time(2) = time(2) + rem(p,freq);
|
||||
|
||||
if time(2)>freq
|
||||
time(1) = time(1) + 1;
|
||||
time(2) = time(2) - freq;
|
||||
end
|
||||
|
||||
if time(2)<1
|
||||
time(1) = time(1) - 1;
|
||||
time(2) = time(2) + freq;
|
||||
end
|
||||
|
||||
%@test:1
|
||||
%$ t(1) = dyn_assert(add_periods_to_date([1950 1], 4, 1),[1950 2]);
|
||||
%$ t(2) = dyn_assert(add_periods_to_date([1950 1], 4, 2),[1950 3]);
|
||||
%$ t(3) = dyn_assert(add_periods_to_date([1950 1], 4, 3),[1950 4]);
|
||||
%$ t(4) = dyn_assert(add_periods_to_date([1950 1], 4, 4),[1951 1]);
|
||||
%$ t(5) = dyn_assert(add_periods_to_date([1950 1], 4, 5),[1951 2]);
|
||||
%$ t(6) = dyn_assert(add_periods_to_date([1950 1], 4, 6),[1951 3]);
|
||||
%$ t(7) = dyn_assert(add_periods_to_date([1950 1], 4, 7),[1951 4]);
|
||||
%$ t(8) = dyn_assert(add_periods_to_date([1950 1], 4, 8),[1952 1]);
|
||||
%$ T = all(t);
|
||||
%@eof:1
|
||||
|
||||
%@test:2
|
||||
%$ t(1) = dyn_assert(add_periods_to_date([1950 1], 4, -1),[1949 4]);
|
||||
%$ t(2) = dyn_assert(add_periods_to_date([1950 1], 4, -2),[1949 3]);
|
||||
%$ t(3) = dyn_assert(add_periods_to_date([1950 1], 4, -3),[1949 2]);
|
||||
%$ t(4) = dyn_assert(add_periods_to_date([1950 1], 4, -4),[1949 1]);
|
||||
%$ t(5) = dyn_assert(add_periods_to_date([1950 1], 4, -5),[1948 4]);
|
||||
%$ t(6) = dyn_assert(add_periods_to_date([1950 1], 4, -6),[1948 3]);
|
||||
%$ t(7) = dyn_assert(add_periods_to_date([1950 1], 4, -7),[1948 2]);
|
||||
%$ t(8) = dyn_assert(add_periods_to_date([1950 1], 4, -8),[1948 1]);
|
||||
%$ T = all(t);
|
||||
%@eof:2
|
Loading…
Reference in New Issue