uplus.m 2.85 KB
Newer Older
Stéphane Adjemian's avatar
Stéphane Adjemian committed
1
2
3
4
function b = uplus(a)

%@info:
%! @deftypefn {Function File} {@var{b} =} uplus (@var{a})
5
%! @anchor{@dynDate/uplus}
Stéphane Adjemian's avatar
Stéphane Adjemian committed
6
%! @sp 1
7
%! Overloads the uplus (unary addition) operator for the Dynare dates class (@ref{dynDate}). Increment the date by one year, quarter,
Stéphane Adjemian's avatar
Stéphane Adjemian committed
8
9
10
11
12
13
%! month or week depending on the frequency.
%! @sp 2
%! @strong{Inputs}
%! @sp 1
%! @table @ @var
%! @item a
14
%! Dynare date object instantiated by @ref{dynDate}.
Stéphane Adjemian's avatar
Stéphane Adjemian committed
15
16
17
18
19
20
%! @end table
%! @sp 1
%! @strong{Outputs}
%! @sp 1
%! @table @ @var
%! @item b
21
%! Dynare date object instantiated by @ref{dynDate}.
Stéphane Adjemian's avatar
Stéphane Adjemian committed
22
23
24
25
26
%! @end table
%! @sp 2
%! @strong{This function is called by:}
%! @sp 2
%! @strong{This function calls:}
27
%! @ref{dynDate}
Stéphane Adjemian's avatar
Stéphane Adjemian committed
28
29
30
31
%!
%! @end deftypefn
%@eod:

Sébastien Villemot's avatar
Sébastien Villemot committed
32
% Copyright (C) 2011-2013 Dynare Team
Stéphane Adjemian's avatar
Stéphane Adjemian committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
%
% 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/>.

49
50
if ~isa(a,'dynDate')
    error(['dynDate::uplus: Input argument ' inputname(1) ' must be a dynDate object.'])
Stéphane Adjemian's avatar
Stéphane Adjemian committed
51
52
end

53
b = dynDate(a);
Stéphane Adjemian's avatar
Stéphane Adjemian committed
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

switch b.freq
  case 1
    b.time(1) = b.time(1)+1;
  case 4
    if b.time(2)==4% Happy new year!
        b.time(1) = b.time(1)+1;
        b.time(2) = 1;
    else
        b.time(2) = b.time(2)+1;
    end
  case 12
    if b.time(2)==12% Happy new year!
        b.time(1) = b.time(1)+1;
        b.time(2) = 1;
    else
        b.time(2) = b.time(2)+1;
    end
  case 52
    if b.time(2)==52% Happy new year!
        b.time(1) = b.time(1)+1;
        b.time(2) = 1;
    else
        b.time(2) = b.time(2)+1;
    end
  otherwise
80
    error('dynDate::uplus: Unknown frequency!')
Stéphane Adjemian's avatar
Stéphane Adjemian committed
81
82
83
84
85
86
87
end

%@test:1
%$ % Define some dates
%$ date_1 = '1950Q3';
%$ date_2 = '1950Q4';
%$ date_3 = '1950M3';
88
%$ date_4 = '1950m12';
Stéphane Adjemian's avatar
Stéphane Adjemian committed
89
90
91
92
93
%$ date_5 = '1950W3';
%$ date_6 = '1950W52';
%$ date_7 = 2000;
%$
%$ % Call the tested routine.
94
95
96
97
98
99
100
%$ d1 = dynDate(date_1);
%$ d2 = dynDate(date_2);
%$ d3 = dynDate(date_3);
%$ d4 = dynDate(date_4);
%$ d5 = dynDate(date_5);
%$ d6 = dynDate(date_6);
%$ d7 = dynDate(date_7);
Stéphane Adjemian's avatar
Stéphane Adjemian committed
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
%$ e1 = +d1;
%$ e2 = +d2;
%$ e3 = +d3;
%$ e4 = +d4;
%$ e5 = +d5;
%$ e6 = +d6;
%$ e7 = +d7;
%$
%$ % Check the results.
%$ t(1) = dyn_assert(e1.time,[1950 4]);
%$ t(2) = dyn_assert(e2.time,[1951 1]);
%$ t(3) = dyn_assert(e3.time,[1950 4]);
%$ t(4) = dyn_assert(e4.time,[1951 1]);
%$ t(5) = dyn_assert(e5.time,[1950 4]);
%$ t(6) = dyn_assert(e6.time,[1951 1]);
%$ t(7) = dyn_assert(e7.time,[2001 1]);
%$ T = all(t);
Sébastien Villemot's avatar
Sébastien Villemot committed
118
%@eof:1