function C = colon(varargin) % --*-- Unitary tests --*-- % Overloads the colon operator (:). This method can be used to create ranges of dates. % % INPUTS % o A dates object with one element. % o d integer scalar, number of periods between each date (default value, if nargin==2, is one) % o B dates object with one element. % % OUTPUTS % o C dates object with length(B-A) elements (if d==1). % % REMARKS % B must be greater than A if d>0. % 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 . if isequal(nargin,2) A = varargin{1}; B = varargin{2}; d = 1; if ~(isa(A,'dates') && isa(B,'dates') && isequal(length(A),1) && isequal(length(B),1)) error('dates::colon: In an expression like A:B, A and B must be dates objects!') end elseif isequal(nargin,3) A = varargin{1}; B = varargin{3}; d = varargin{2}; if ~(isa(A,'dates') && isa(B,'dates') && isequal(length(A),1) && isequal(length(B),1)) error('dates::colon: In an expression like A:d:B, A and B must be dates objects and d a scalar integer (number of periods)!') end if ~(isscalar(d) && isint(d)) error('dates::colon: In an expression like A:d:B, A and B must be dates objects and d a scalar integer (number of periods)!') end if isequal(d,0) error('dates::colon: In an expression like A:d:B, d (the incremental number of periods) must nonzero!') end else error('dates::colon: Wrong calling sequence! See the manual for the colon (:) operator and dates objects.') end if ~isequal(A.freq,B.freq) error(['dates::colon: Input arguments ' inputname(1) 'and ' inputname(2) ' must have common frequency!']) end if A>B && d>0 error(['dates::colon: ' inputname(1) ' must precede ' inputname(2) '!' ]) end if B>A && d<0 error(['dates::colon: ' inputname(2) ' must precede ' inputname(1) '!' ]) end C = dates(); n = (B-A)+1; C.freq = A.freq; C.ndat = n; C.time = NaN(n,2); C.time(1,:) = A.time; current_date = A; linee = 1; while current_date