From 40019182105d04db4a8c360d866311b4769fe5c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Sat, 12 Oct 2013 17:36:33 +0200 Subject: [PATCH] Added @dynDates/min and @dynDates/max methods. --- matlab/@dynDates/max.m | 107 +++++++++++++++++++++++++++++++++++++++++ matlab/@dynDates/min.m | 107 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 214 insertions(+) create mode 100644 matlab/@dynDates/max.m create mode 100644 matlab/@dynDates/min.m diff --git a/matlab/@dynDates/max.m b/matlab/@dynDates/max.m new file mode 100644 index 000000000..d123466de --- /dev/null +++ b/matlab/@dynDates/max.m @@ -0,0 +1,107 @@ +function C = max(varargin) + +% Overloads the max function for dynDates objects. + +% 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 . + +switch nargin + case 1 + A = varargin{1}; + switch length(A) + case 0 + C= dynDates(); + case 1 + C = A; + otherwise + tmp = sortrows(A.time); + C = dynDates(); + C.freq = A.freq; + C.ndat = 1; + C.time = tmp(A.ndat,:); + end + case 2 + A = varargin{1}; + if ~isa(A,'dynDates') + error('dynDates::max: All inputs must be dynDates objects!') + end + B = varargin{2}; + if ~isa(B,'dynDates') + error('dynDates::max: All inputs must be dynDates objects!') + end + C = max(A+B); + otherwise + if ~isa(varargin{1},'dynDates') + error('dynDates::max: All inputs must be dynDates objects!') + end + A = varargin{1}; + for i=2:nargin + if ~isa(varargin{i},'dynDates') + error('dynDates::max: All inputs must be dynDates objects!') + end + A = A + varargin{i}; + end + C = max(A); +end + +%@test:1 +%$ % Define some dates +%$ d3 = dynDates('1950q2'); +%$ d4 = dynDates('1950Q3'); +%$ d5 = dynDates('1950m1'); +%$ d6 = dynDates('1948M6'); +%$ m2 = max(d3,d4); +%$ i2 = (m2==d4); +%$ m3 = max(d5,d6); +%$ i3 = (m3==d5); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(i2,1); +%$ t(2) = dyn_assert(i3,1); +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ % Define some dates +%$ d = dynDates('1950Q2','1951Q3','1949Q1','1950Q4'); +%$ m = max(d); +%$ i = (m==dynDates('1951Q3')); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(i,1); +%$ T = all(t); +%@eof:2 + +%@test:3 +%$ % Define some dates +%$ m = max(dynDates('1950Q2','1951Q3'),dynDates('1949Q1'),dynDates('1950Q4')); +%$ i = (m==dynDates('1951Q3')); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(i,1); +%$ T = all(t); +%@eof:3 + +%@test:4 +%$ % Define some dates +%$ m = max(dynDates('1950Q2'),dynDates('1951Q3'),dynDates('1949Q1'),dynDates('1950Q4')); +%$ i = (m==dynDates('1951Q3')); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(i,1); +%$ T = all(t); +%@eof:4 \ No newline at end of file diff --git a/matlab/@dynDates/min.m b/matlab/@dynDates/min.m new file mode 100644 index 000000000..959c08ea1 --- /dev/null +++ b/matlab/@dynDates/min.m @@ -0,0 +1,107 @@ +function C = min(varargin) + +% Overloads the min function for dynDates objects. + +% 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 . + +switch nargin + case 1 + A = varargin{1}; + switch length(A) + case 0 + C= dynDates(); + case 1 + C = A; + otherwise + tmp = sortrows(A.time); + C = dynDates(); + C.freq = A.freq; + C.ndat = 1; + C.time = tmp(1,:); + end + case 2 + A = varargin{1}; + if ~isa(A,'dynDates') + error('dynDates::min: All inputs must be dynDates objects!') + end + B = varargin{2}; + if ~isa(B,'dynDates') + error('dynDates::min: All inputs must be dynDates objects!') + end + C = min(A+B); + otherwise + if ~isa(varargin{1},'dynDates') + error('dynDates::min: All inputs must be dynDates objects!') + end + A = varargin{1}; + for i=2:nargin + if ~isa(varargin{i},'dynDates') + error('dynDates::min: All inputs must be dynDates objects!') + end + A = A + varargin{i}; + end + C = min(A); +end + +%@test:1 +%$ % Define some dates +%$ d3 = dynDates('1950q2'); +%$ d4 = dynDates('1950Q3'); +%$ d5 = dynDates('1950m1'); +%$ d6 = dynDates('1948M6'); +%$ m2 = min(d3,d4); +%$ i2 = (m2==d3); +%$ m3 = min(d5,d6); +%$ i3 = (m3==d6); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(i2,1); +%$ t(2) = dyn_assert(i3,1); +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ % Define some dates +%$ d = dynDates('1950Q2','1951Q3','1949Q1','1950Q4'); +%$ m = min(d); +%$ i = (m==dynDates('1949Q1')); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(i,1); +%$ T = all(t); +%@eof:2 + +%@test:3 +%$ % Define some dates +%$ m = min(dynDates('1950Q2','1951Q3'),dynDates('1949Q1'),dynDates('1950Q4')); +%$ i = (m==dynDates('1949Q1')); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(i,1); +%$ T = all(t); +%@eof:3 + +%@test:4 +%$ % Define some dates +%$ m = min(dynDates('1950Q2'),dynDates('1951Q3'),dynDates('1949Q1'),dynDates('1950Q4')); +%$ i = (m==dynDates('1949Q1')); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(i,1); +%$ T = all(t); +%@eof:4 \ No newline at end of file