1function o = vertcat(varargin) % --*-- Unitary tests --*-- 2 3% Overloads vertcat method for dseries objects. 4% 5% INPUTS 6% o o1 dseries object. 7% o o2 dseries object. 8% o ... 9% 10% OUTPUTS 11% o o dseries object. 12% 13% EXAMPLE 1 14% If o1, o2 and o3 are dseries objects containing the same variables over different samples, the following syntax: 15% 16% o = [o1; o2; o3] ; 17% 18% merges the samples. 19 20% Copyright (C) 2013-2017 Dynare Team 21% 22% This file is part of Dynare. 23% 24% Dynare is free software: you can redistribute it and/or modify 25% it under the terms of the GNU General Public License as published by 26% the Free Software Foundation, either version 3 of the License, or 27% (at your option) any later version. 28% 29% Dynare is distributed in the hope that it will be useful, 30% but WITHOUT ANY WARRANTY; without even the implied warranty of 31% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 32% GNU General Public License for more details. 33% 34% You should have received a copy of the GNU General Public License 35% along with Dynare. If not, see <http://www.gnu.org/licenses/>. 36 37if nargin==0 38 o = dseries(); 39elseif nargin == 1 40 o = copy(varargin{1}); 41elseif nargin>1 42 o = copy(varargin{1}); 43 for i=2:nargin 44 o = vertcat_(o, varargin{i}); 45 end 46end 47 48function d = vertcat_(b, c) 49d = NaN; 50if ~isequal(frequency(b), frequency(c)) 51 error('dseries::vertcat: Frequencies must be common!') 52end 53if ~isequal(vobs(b), vobs(c)) 54 error('dseries::vertcat: Number of variables must be common!') 55end 56reorder_variables_in_c = false; 57if ~isequal(b.name, c.name) 58 [t, idx] = ismember(b.name, c.name); 59 if all(t) 60 reorder_variables_in_c = true; 61 else 62 error('dseries::vertcat: Variables must be common!') 63 end 64end 65d = b; 66if reorder_variables_in_c 67 d.data = [b.data; c.data(:,idx)]; 68else 69 d.data = [b.data; c.data]; 70end 71d.dates = [b.dates; c.dates]; 72 73%@test:1 74%$ % Define a data set. 75%$ A = [transpose(1:10),2*transpose(1:10)]; 76%$ B = [transpose(1:10),2*transpose(1:10)]; 77%$ 78%$ % Define names 79%$ A_name = {'A1';'A2'}; 80%$ B_name = {'A1';'A2'}; 81%$ 82%$ % Define expected results. 83%$ e.init = dates(1,1); 84%$ e.freq = 1; 85%$ e.name = {'A1';'A2'}; 86%$ e.data = [A;B]; 87%$ 88%$ % Instantiate two time series objects. 89%$ ts1 = dseries(A,[],A_name,[]); 90%$ ts2 = dseries(B,[],B_name,[]); 91%$ 92%$ % Call the tested method. 93%$ try 94%$ ts3 = [ts1;ts2]; 95%$ t(1) = 1; 96%$ catch 97%$ t(1) = 0; 98%$ end 99%$ 100%$ % Check the results. 101%$ if t(1) 102%$ t(2) = dassert(ts3.init,e.init); 103%$ t(3) = dassert(ts3.freq,e.freq); 104%$ t(4) = dassert(ts3.data,e.data); 105%$ t(5) = dassert(ts3.name,e.name); 106%$ t(6) = dassert(ts3.nobs,20); 107%$ end 108%$ T = all(t); 109%@eof:1 110 111%@test:2 112%$ % Define a data set. 113%$ A = [transpose(1:10),2*transpose(1:10)]; 114%$ B = [transpose(1:10),2*transpose(1:10)]; 115%$ C = [transpose(1:10),3*transpose(1:10)]; 116%$ 117%$ % Define names 118%$ A_name = {'A1';'A2'}; 119%$ B_name = {'A1';'A2'}; 120%$ C_name = {'A1';'A2'}; 121%$ 122%$ % Define expected results. 123%$ e.init = dates(1,1); 124%$ e.freq = 1; 125%$ e.name = {'A1';'A2'}; 126%$ e.data = [A;B;C]; 127%$ 128%$ % Instantiate two time series objects. 129%$ ts1 = dseries(A,[],A_name,[]); 130%$ ts2 = dseries(B,[],B_name,[]); 131%$ ts3 = dseries(C,[],C_name,[]); 132%$ 133%$ % Call the tested method. 134%$ try 135%$ ts4 = [ts1; ts2; ts3]; 136%£ t(1) = 1; 137%$ catch 138%$ t(1) = 0; 139%$ end 140%$ 141%$ 142%$ % Check the results. 143%$ if t(1) 144%$ t(2) = dassert(ts4.init,e.init); 145%$ t(3) = dassert(ts4.freq,e.freq); 146%$ t(4) = dassert(ts4.data,e.data); 147%$ t(5) = dassert(ts4.name,e.name); 148%$ t(6) = dassert(ts4.nobs,30); 149%$ end 150%$ T = all(t); 151%@eof:2 152 153%@test:3 154%$ A = dseries([ones(5,1), 2*ones(5,1)],'1938Q4',{'A1', 'A2'}); 155%$ B = dseries([2*ones(2,1), ones(2,1)],'1945Q3',{'A2', 'A1'}); 156%$ 157%$ try 158%$ C = [A; B]; 159%$ t(1) = true; 160%$ catch 161%$ t(1) = false; 162%$ end 163%$ 164%$ % Check the results. 165%$ if t(1) 166%$ t(2) = dassert(C.data,[ones(7,1), 2*ones(7,1)]); 167%$ end 168%$ T = all(t); 169%@eof:3 170 171%@test:4 172%$ A = dseries(ones(3, 1), '1990Q1'); 173%$ B = dseries(2*ones(3, 1), '1990Q4'); 174%$ 175%$ try 176%$ C = [A; B]; 177%$ t(1) = true; 178%$ catch 179%$ t(1) = false; 180%$ end 181%$ 182%$ % Check the results. 183%$ if t(1) 184%$ t(2) = dassert(C.data, [ones(3,1); 2*ones(3,1)]); 185%$ t(3) = dassert(A.data, ones(3,1)); 186%$ t(4) = dassert(B.data, 2*ones(3,1)); 187%$ end 188%$ T = all(t); 189%@eof:4 190