diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c1c2836cb..4617cd49e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,17 +25,24 @@ stages:
- sign
- deploy
-build_binaries:
+build_matlab:
stage: build
script:
- - autoreconf -si
- - ./configure --with-matlab=/opt/MATLAB/$MATLAB_VERSION PACKAGE_VERSION=$VERSION PACKAGE_STRING="dynare $VERSION"
- - make -j $(nproc) LN_S="cp -p"
+ - meson setup -Dbuild_for=matlab -Dmatlab_path=/opt/MATLAB/$MATLAB_VERSION -Dbuildtype=release build-matlab
+ - meson compile -v -C build-matlab
artifacts:
paths:
- - preprocessor/dynare-preprocessor
- - mex/octave/
- - mex/matlab/
+ - build-matlab/
+ expire_in: 3 days
+
+build_octave:
+ stage: build
+ script:
+ - meson setup -Dbuild_for=octave -Dbuildtype=release build-octave
+ - meson compile -v -C build-octave
+ artifacts:
+ paths:
+ - build-octave/
expire_in: 3 days
build_doc:
@@ -109,32 +116,26 @@ pkg_macOS:
expire_in: 3 days
needs: [ "build_doc" ]
-.test_matlab_template:
+test_matlab:
stage: test
+ script:
+ - meson test -C build-matlab --no-rebuild --num-processes $(($(nproc) * 3 / 4))
artifacts:
paths:
- - tests/**/*.m.log
- - tests/**/*.m.trs
- - tests/**/*.jnl
- - tests/run_test_matlab_output.txt
+ - build-matlab/meson-logs/testlog.txt
when: always
- needs: [ "build_binaries" ]
-
-test_matlab:
- extends: .test_matlab_template
- script:
- - autoreconf -si
- - ./configure --disable-octave --with-matlab=/opt/MATLAB/$MATLAB_VERSION
- - make -j $(($(nproc) * 3 / 4)) -C tests check-matlab
+ needs: [ "build_matlab" ]
test_old_matlab:
- extends: .test_matlab_template
+ stage: test
script:
- - autoreconf -si
- - ./configure --disable-octave --with-matlab=/opt/MATLAB/$OLD_MATLAB_VERSION
- - make -C mex/build/matlab clean
- - make -j $(nproc) -C mex/build/matlab
- - make -j $(($(nproc) * 3 / 4)) -C tests check-matlab
+ - meson setup -Dbuild_for=matlab -Dmatlab_path=/opt/MATLAB/$OLD_MATLAB_VERSION -Dbuildtype=release build-old-matlab
+ - meson compile -v -C build-old-matlab
+ - meson test -C build-old-matlab --num-processes $(($(nproc) * 3 / 4))
+ artifacts:
+ paths:
+ - build-old-matlab/meson-logs/testlog.txt
+ when: always
when: manual
test_octave:
@@ -142,17 +143,12 @@ test_octave:
variables:
OPENBLAS_NUM_THREADS: 1
script:
- - autoreconf -si
- - ./configure --disable-matlab
- - make -j $(nproc) -C tests check-octave
+ - meson test -C build-octave --no-rebuild
artifacts:
paths:
- - tests/**/*.o.log
- - tests/**/*.o.trs
- - tests/**/*.jnl
- - tests/run_test_octave_output.txt
+ - build-octave/meson-logs/testlog.txt
when: always
- needs: [ "build_binaries" ]
+ needs: [ "build_octave" ]
when: manual
# For the sign and deploy jobs, we don’t use the “needs” keyword, since we
diff --git a/meson.build b/meson.build
index 60109e20d..a2d49f9ae 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,4 @@
# TODO:
-# - Add tests that are individually listed in {M,O}_TRS_FILES of tests/Makefile.am
# - Install files in right location
# - configuration option to disable preprocessor build, and use it in {windows,macOS}/build.sh
# - add -Wold-style-cast C++ flag except when building flex-generated files
@@ -1677,9 +1676,71 @@ mod_and_m_tests = [
{ 'test' : [ 'var-expectations/1-with-time-shift-b/example1.mod' ],
'should_fail' : true },
{ 'test' : [ 'estimation/univariate/nls/staticmodelx.mod' ],
- 'should_fail' : true }
+ 'should_fail' : true },
+
+ # Misc tests with .m files
+ { 'test' : [ 'run_all_unit_tests.m' ] },
+ { 'test' : [ 'histval_initval_file_unit_tests.m' ],
+ 'extra' : [ 'histval_initval_file/my_assert.m' ] },
+ { 'test' : [ 'run_kronecker_tests.m' ],
+ 'extra' : [ 'kronecker/test_kron.m',
+ 'kronecker/nash_matrices.mat' ] },
+ { 'test' : [ 'nonlinearsolvers.m' ],
+ 'extra' : [ 'solver-test-functions/brown.m',
+ 'solver-test-functions/broydenbanded.m',
+ 'solver-test-functions/broydentridiagonal.m',
+ 'solver-test-functions/chebyquad.m',
+ 'solver-test-functions/discreteboundaryvalue.m',
+ 'solver-test-functions/discreteintegralequation.m',
+ 'solver-test-functions/helicalvalley.m',
+ 'solver-test-functions/powell1.m',
+ 'solver-test-functions/powell2.m',
+ 'solver-test-functions/rosenbrock.m',
+ 'solver-test-functions/trigonometric.m',
+ 'solver-test-functions/variablydimensioned.m',
+ 'solver-test-functions/watson.m',
+ 'solver-test-functions/wood.m',] },
+ { 'test' : [ 'cyclereduction.m' ] },
+ { 'test' : [ 'logarithmicreduction.m' ] },
+ { 'test' : [ 'riccatiupdate.m' ] },
+ { 'test' : [ 'contribs.m' ],
+ 'extra' : [ 'sandbox.mod',
+ 'simulateddata.m' ] }
]
+if get_option('build_for') == 'matlab'
+ mod_and_m_tests += [ { 'test' : [ 'run_block_byte_tests_matlab.m' ],
+ 'extra' : [ 'block_bytecode/run_ls2003.m',
+ 'block_bytecode/ls2003.mod' ] },
+ { 'test' : [ 'run_reporting_test_matlab.m' ],
+ 'extra' : [ 'reporting/AnnualTable.m',
+ 'reporting/CommResidTablePage.m',
+ 'reporting/CountryGraphPage.m',
+ 'reporting/CountryTablePage.m',
+ 'reporting/db_a.csv',
+ 'reporting/db_q.csv',
+ 'reporting/dc_a.csv',
+ 'reporting/dc_q.csv',
+ 'reporting/ResidTablePage.m',
+ 'reporting/runDynareReport.m' ] } ]
+else
+ mod_and_m_tests += [ { 'test' : [ 'run_block_byte_tests_octave.m' ],
+ 'extra' : [ 'block_bytecode/run_ls2003.m',
+ 'block_bytecode/ls2003.mod' ] },
+ { 'test' : [ 'run_reporting_test_octave.m' ],
+ 'extra' : [ 'reporting/AnnualTable.m',
+ 'reporting/CommResidTablePage.m',
+ 'reporting/CountryGraphPage.m',
+ 'reporting/CountryTablePage.m',
+ 'reporting/db_a.csv',
+ 'reporting/db_q.csv',
+ 'reporting/dc_a.csv',
+ 'reporting/dc_q.csv',
+ 'reporting/ResidTablePage.m',
+ 'reporting/runDynareReport.m' ] } ]
+endif
+
+
base_test_driver_args = [ get_option('build_for') ]
if get_option('build_for') == 'matlab'
base_test_driver_args += [ matlab_exe.full_path(), matlab_version, matlab_arch ]
diff --git a/scripts/test-driver b/scripts/test-driver
index 12531bae3..c95ead0fe 100755
--- a/scripts/test-driver
+++ b/scripts/test-driver
@@ -3,6 +3,7 @@
# Executes one or several .mod or .m files in a separate directory, for the testsuite
set -e
+shopt -s extglob
if (($# < 7 )); then
echo "Usage: $0 build_for matlab_octave_exe matlab_octave_version matlab_arch source_root build_root test_file(s) [-- extra_file(s)]" 2>&1
@@ -40,7 +41,11 @@ cleanup ()
trap cleanup EXIT
for f in "${test_files[@]}" "${extra_files[@]}"; do
- subdir=${f%/*}
+ # NB: for computing the subdir, we do not use ${f%/*}, because the latter does not
+ # work with files which are not in a subdir (i.e. no slash in the filename).
+ # We rather use pattern substitution (and we use an extended pattern of the
+ # form *(pattern-list), hence the extglob option above).
+ subdir=${f/%*([^\/])/}
mkdir -p "${tmpdir}/${subdir}"
cp "${source_root}/tests/${f}" "${tmpdir}/${f}"
done
@@ -69,7 +74,8 @@ export source_root
for test_file in "${test_files[@]}"; do
test_basename=${test_file##*/}
- test_subdir=${test_file%/*}
+ # See the remark above for computing the subdir
+ test_subdir=${test_file/%*([^\/])/}
if [[ $test_file =~ \.mod$ ]]; then
export mod_file=$test_basename
if [[ $build_for == matlab ]]; then
diff --git a/tests/contribs.m b/tests/contribs.m
index 94efddf96..ce5ca305c 100644
--- a/tests/contribs.m
+++ b/tests/contribs.m
@@ -1,28 +1,15 @@
debug = false;
-if debug
- [top_test_dir, ~, ~] = fileparts(mfilename('fullpath'));
-else
- top_test_dir = getenv('TOP_TEST_DIR');
-end
-
-addpath(sprintf('%s/matlab', top_test_dir(1:end-6)))
-
-if ~debug
- % Test Dynare Version
- if ~strcmp(dynare_version(), getenv('DYNARE_VERSION'))
- error('Incorrect version of Dynare is being tested')
- end
-end
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'matlab']);
dynare_config;
-NumberOfTests = 0;
testFailed = 0;
if ~debug
skipline()
- disp('*** TESTING: nonlinearsolvers.m ***');
+ disp('*** TESTING: contribs.m ***');
end
%
@@ -31,8 +18,6 @@ end
t0 = clock;
-NumberOfTests = NumberOfTests+1;
-
try
dataset = dseries('simulateddata.m');
@@ -51,32 +36,9 @@ end
t1 = clock;
+fprintf('\n*** Elapsed time (in seconds): %.1f\n\n', etime(t1, t0));
-if ~debug
- cd(getenv('TOP_TEST_DIR'));
-else
- dprintf('FAILED tests: %i', testFailed)
-end
-
-if isoctave
- fid = fopen('contribs.o.trs', 'w+');
-else
- fid = fopen('contribs.m.trs', 'w+');
-end
-if testFailed
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':list-of-failed-tests: nonlinearsolvers.m\n');
-else
- fprintf(fid,':test-result: PASS\n');
-end
-fprintf(fid,':number-tests: %i\n', NumberOfTests);
-fprintf(fid,':number-failed-tests: %i\n', testFailed);
-fprintf(fid,':elapsed-time: %f\n', etime(t1, t0));
-fclose(fid);
-
-if ~debug
- exit;
-end
+quit(testFailed > 0)
%
% END OF TEST
%
diff --git a/tests/cyclereduction.m b/tests/cyclereduction.m
index bb2c70482..6bf99c004 100644
--- a/tests/cyclereduction.m
+++ b/tests/cyclereduction.m
@@ -1,23 +1,10 @@
debug = false;
-if debug
- [top_test_dir, ~, ~] = fileparts(mfilename('fullpath'));
-else
- top_test_dir = getenv('TOP_TEST_DIR');
-end
-
-addpath([top_test_dir filesep '..' filesep 'matlab']);
-
-if ~debug
- % Test Dynare Version
- if ~strcmp(dynare_version(), getenv('DYNARE_VERSION'))
- error('Incorrect version of Dynare is being tested')
- end
-end
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'matlab']);
dynare_config;
-NumberOfTests = 0;
testFailed = 0;
if ~debug
@@ -25,17 +12,11 @@ if ~debug
disp('*** TESTING: cyclereduction.m ***');
end
-matlab_cr_path = [top_test_dir filesep '..' filesep 'matlab' filesep 'missing' filesep 'mex' filesep 'cycle_reduction'];
+matlab_cr_path = [source_dir filesep 'matlab' filesep 'missing' filesep 'mex' filesep 'cycle_reduction'];
addpath(matlab_cr_path);
cycle_reduction_matlab = @cycle_reduction;
rmpath(matlab_cr_path);
-if isoctave
- addpath([top_test_dir filesep '..' filesep 'mex' filesep 'octave']);
-else
- addpath([top_test_dir filesep '..' filesep 'mex' filesep 'matlab']);
-end
-
t0 = clock;
% Set the dimension of the problem to be solved.
@@ -49,7 +30,6 @@ X1 = zeros(n,n);
X2 = zeros(n,n);
% 1. Solve the equation with the Matlab cycle reduction algorithm
-NumberOfTests = NumberOfTests+1;
tElapsed1 = 0.;
try
tic; [X1,info] = cycle_reduction_matlab(C,B,A,cvg_tol,[0.]); tElapsed1 = toc;
@@ -69,7 +49,6 @@ catch
end
% 2. Solve the equation with the Fortran cycle reduction algorithm
-NumberOfTests = NumberOfTests+1;
tElapsed2 = 0.;
try
tic; [X2,info] = cycle_reduction(C,B,A,cvg_tol,[0.]); tElapsed2 = toc;
@@ -89,7 +68,6 @@ catch
end
% 3. Compare solutions of the Fortran and Matlab routines
-NumberOfTests = NumberOfTests+1;
if (norm(X1 - X2, 1) > cvg_tol)
testFailed = testFailed+1;
if debug
@@ -112,29 +90,6 @@ end
t1 = clock;
-if ~debug
- cd(getenv('TOP_TEST_DIR'));
-else
- dprintf('FAILED tests: %i', testFailed)
-end
-
-if isoctave
- fid = fopen('cyclereduction.o.trs', 'w+');
-else
- fid = fopen('cyclereduction.m.trs', 'w+');
-end
-if testFailed
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':list-of-failed-tests: cyclereduction.m\n');
-else
- fprintf(fid,':test-result: PASS\n');
-end
-fprintf(fid,':number-tests: %i\n', NumberOfTests);
-fprintf(fid,':number-failed-tests: %i\n', testFailed);
-fprintf(fid,':elapsed-time: %f\n', etime(t1, t0));
-fclose(fid);
-
-if ~debug
- exit;
-end
+fprintf('\n*** Elapsed time (in seconds): %.1f\n\n', etime(t1, t0));
+quit(testFailed > 0)
diff --git a/tests/histval_initval_file_unit_tests.m b/tests/histval_initval_file_unit_tests.m
index e2f6e514e..9d5f622b3 100644
--- a/tests/histval_initval_file_unit_tests.m
+++ b/tests/histval_initval_file_unit_tests.m
@@ -1,9 +1,9 @@
-top_test_dir = getenv('TOP_TEST_DIR');
-addpath([top_test_dir filesep '..' filesep 'matlab/']);
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'matlab']);
+
dynare_config;
-cd('histval_initval_file');
-num_tests = 0;
+cd histval_initval_file
failed_tests = {};
ds = dseries(randn(10,4));
@@ -26,7 +26,6 @@ options.series = 'ds';
ds1 = histvalf_initvalf(caller, M, options);
failed_tests = my_assert(failed_tests, all(all(ds1 == ds)), 'basic test');
-num_tests = num_tests + 1;
options = struct();
options.series = 'ds1';
@@ -34,7 +33,6 @@ options.first_obs = 2;
ds1 = histvalf_initvalf(caller, M, options);
failed_tests = my_assert(failed_tests, ds1.init == dates('2Y'), ...
'init test 1');
-num_tests = num_tests + 1;
options = struct();
options.series = 'ds';
@@ -45,7 +43,6 @@ failed_tests = my_assert(failed_tests, ds1.init == dates('2Y'), ...
'first_obs last_obs test 1');
failed_tests = my_assert(failed_tests, ds1.last == dates('9Y'), ...
'first_obs last_obs test 2');
-num_tests = num_tests + 2;
options = struct();
options.series = 'ds';
@@ -55,7 +52,6 @@ failed_tests = my_assert(failed_tests, ds1.init == dates('1Y'), ...
'last_obs test 1');
failed_tests = my_assert(failed_tests, ds1.last == dates('9Y'), ...
'last_obs test 2');
-num_tests = num_tests + 2;
options = struct();
options.series = 'ds';
@@ -67,7 +63,6 @@ failed_tests = my_assert(failed_tests, ds1.init == dates('2Y'), ...
'first_obs, last_obs, nobs test 1');
failed_tests = my_assert(failed_tests, ds1.last == dates('9Y'), ...
'first_obs, last_obs, nobs test 2');
-num_tests = num_tests + 2;
options = struct();
options.series = 'ds';
@@ -78,7 +73,6 @@ failed_tests = my_assert(failed_tests, ds1.init == dates('2Y'), ...
'last_obs, nobs test 1');
failed_tests = my_assert(failed_tests, ds1.last == dates('9Y'), ...
'last_obs, nobs test 2');
-num_tests = num_tests + 2;
options = struct();
options.series = 'ds';
@@ -96,7 +90,6 @@ catch me
failed_tests = cat(1, failed_tests, 'Wrong nobs error message' );
end
end
-num_tests = num_tests + 1;
options = struct();
options.series = 'ds';
@@ -111,7 +104,6 @@ catch me
'Wrong first period error message');
end
end
-num_tests = num_tests + 1;
options = struct();
options.series = 'ds';
@@ -127,7 +119,6 @@ catch me
'Wrong last period error message');
end
end
-num_tests = num_tests + 1;
fh = fopen('data.m', 'w');
init__ = 'INIT__ = ''1Y'';';
@@ -195,7 +186,6 @@ if ~isoctave && ((ispc && ~matlab_ver_less_than('8.2')) || (~ispc && ~matlab_ver
'*.xlsx file first_obs test');
failed_tests = my_assert(failed_tests, series.nobs == 10, ...
'*.xlsx file nobs test');
- num_tests = num_tests + 2;
end
% The table() function is not implemented in Octave
@@ -209,26 +199,10 @@ if ~isoctave && (ispc && ~matlab_ver_less_than('8.2'))
'*.xls file first_obs test');
failed_tests = my_assert(failed_tests, series.nobs == 10, ...
'*.xls file nobs test');
- num_tests = num_tests + 2;
end
-cd(getenv('TOP_TEST_DIR'));
-if isoctave
- ext = '.o.trs';
-else
- ext = '.m.trs';
+if length(failed_tests) > 0
+ fprintf('\n*** Failed tests: %s\n', failed_tests{:})
end
-fid = fopen([ 'histval_initval_file_unit_tests' ext ], 'w+');
-num_failed_tests = length(failed_tests);
-if num_failed_tests > 0
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':number-tests: %d\n', num_tests);
- fprintf(fid,':number-failed-tests: %d\n', num_failed_tests);
- fprintf(fid,':list-of-failed-tests: %s\n', failed_tests{:});
-else
- fprintf(fid,':test-result: PASS\n');
- fprintf(fid,':number-tests: %d\n', num_tests);
- fprintf(fid,':number-failed-tests: 0\n');
-end
-fclose(fid);
-exit;
+
+quit(length(failed_tests) > 0)
diff --git a/tests/logarithmicreduction.m b/tests/logarithmicreduction.m
index eb8bf7de7..b8eb76a1e 100644
--- a/tests/logarithmicreduction.m
+++ b/tests/logarithmicreduction.m
@@ -1,23 +1,10 @@
debug = false;
-if debug
- [top_test_dir, ~, ~] = fileparts(mfilename('fullpath'));
-else
- top_test_dir = getenv('TOP_TEST_DIR');
-end
-
-addpath([top_test_dir filesep '..' filesep 'matlab']);
-
-if ~debug
- % Test Dynare Version
- if ~strcmp(dynare_version(), getenv('DYNARE_VERSION'))
- error('Incorrect version of Dynare is being tested')
- end
-end
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'matlab']);
dynare_config;
-NumberOfTests = 0;
testFailed = 0;
if ~debug
@@ -25,17 +12,11 @@ if ~debug
disp('*** TESTING: logarithmicreduction.m ***');
end
-matlab_cr_path = [top_test_dir filesep '..' filesep 'matlab' filesep 'missing' filesep 'mex' filesep 'logarithmic_reduction'];
+matlab_cr_path = [source_dir filesep 'matlab' filesep 'missing' filesep 'mex' filesep 'logarithmic_reduction'];
addpath(matlab_cr_path);
logarithmic_reduction_matlab = @logarithmic_reduction;
rmpath(matlab_cr_path);
-if isoctave
- addpath([top_test_dir filesep '..' filesep 'mex' filesep 'octave']);
-else
- addpath([top_test_dir filesep '..' filesep 'mex' filesep 'matlab']);
-end
-
t0 = clock;
% Set the dimension of the problem to be solved.
@@ -49,7 +30,6 @@ X1 = zeros(n,n);
X2 = zeros(n,n);
% 1. Solve the equation with the Matlab logarithmic reduction algorithm
-NumberOfTests = NumberOfTests+1;
tElapsed1 = 0.;
try
tic; [X1,info] = logarithmic_reduction_matlab(A,B,C,cvg_tol,300,[0.]); tElapsed1 = toc;
@@ -69,7 +49,6 @@ catch
end
% 2. Solve the equation with the Fortran logarithmic reduction algorithm
-NumberOfTests = NumberOfTests+1;
tElapsed2 = 0.;
try
tic; [X2,info] = logarithmic_reduction(A,B,C,cvg_tol,300,[0.]); tElapsed2 = toc;
@@ -89,7 +68,6 @@ catch
end
% 3. Compare solutions of the Fortran and Matlab routines
-NumberOfTests = NumberOfTests+1;
if (norm(X1 - X2, 1) > cvg_tol)
testFailed = testFailed+1;
if debug
@@ -112,29 +90,6 @@ end
t1 = clock;
-if ~debug
- cd(getenv('TOP_TEST_DIR'));
-else
- dprintf('FAILED tests: %i', testFailed)
-end
-
-if isoctave
- fid = fopen('logarithmicreduction.o.trs', 'w+');
-else
- fid = fopen('logarithmicreduction.m.trs', 'w+');
-end
-if testFailed
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':list-of-failed-tests: logarithmicreduction.m\n');
-else
- fprintf(fid,':test-result: PASS\n');
-end
-fprintf(fid,':number-tests: %i\n', NumberOfTests);
-fprintf(fid,':number-failed-tests: %i\n', testFailed);
-fprintf(fid,':elapsed-time: %f\n', etime(t1, t0));
-fclose(fid);
-
-if ~debug
- exit;
-end
+fprintf('\n*** Elapsed time (in seconds): %.1f\n\n', etime(t1, t0));
+quit(testFailed > 0)
diff --git a/tests/nonlinearsolvers.m b/tests/nonlinearsolvers.m
index b8e07f3c4..0195d0217 100644
--- a/tests/nonlinearsolvers.m
+++ b/tests/nonlinearsolvers.m
@@ -1,24 +1,12 @@
debug = false;
-if debug
- [top_test_dir, ~, ~] = fileparts(mfilename('fullpath'));
-else
- top_test_dir = getenv('TOP_TEST_DIR');
-end
-
-addpath(sprintf('%s/matlab', top_test_dir(1:end-6)))
-addpath(sprintf('%s/tests/solver-test-functions', top_test_dir(1:end-6)))
-
-if ~debug
- % Test Dynare Version
- if ~strcmp(dynare_version(), getenv('DYNARE_VERSION'))
- error('Incorrect version of Dynare is being tested')
- end
-end
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'matlab']);
dynare_config;
-NumberOfTests = 0;
+cd solver-test-functions
+
testFailed = 0;
if ~debug
@@ -56,7 +44,6 @@ objfun = { @rosenbrock,
t0 = clock;
for i=1:length(objfun)
- NumberOfTests = NumberOfTests+1;
switch func2str(objfun{i})
case 'helicalvalley'
% FIXME block_trust_region is diverging if x(1)<0.
@@ -110,7 +97,6 @@ t1 = clock; etime(t1, t0)
%
for i=1:length(objfun)
- NumberOfTests = NumberOfTests+1;
switch func2str(objfun{i})
case 'chebyquad'
% Fails with a system of 10 equations.
@@ -151,31 +137,8 @@ for i=1:length(objfun)
end
end
-t2 = clock; etime(t2, t1)
+t2 = clock;
-if ~debug
- cd(getenv('TOP_TEST_DIR'));
-else
- dprintf('FAILED tests: %i', testFailed)
-end
-
-if isoctave
- fid = fopen('nonlinearsolvers.o.trs', 'w+');
-else
- fid = fopen('nonlinearsolvers.m.trs', 'w+');
-end
-if testFailed
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':list-of-failed-tests: nonlinearsolvers.m\n');
-else
- fprintf(fid,':test-result: PASS\n');
-end
-fprintf(fid,':number-tests: %i\n', NumberOfTests);
-fprintf(fid,':number-failed-tests: %i\n', testFailed);
-fprintf(fid,':elapsed-time: %f\n', etime(t2, t0));
-fclose(fid);
-
-if ~debug
- exit;
-end
+fprintf('\n*** Elapsed time (in seconds): %.1f\n\n', etime(t2, t0));
+quit(testFailed > 0)
diff --git a/tests/riccatiupdate.m b/tests/riccatiupdate.m
index 82014424c..0cc04561a 100644
--- a/tests/riccatiupdate.m
+++ b/tests/riccatiupdate.m
@@ -1,23 +1,10 @@
debug = true;
-if debug
- [top_test_dir, ~, ~] = fileparts(mfilename('fullpath'));
-else
- top_test_dir = getenv('TOP_TEST_DIR');
-end
-
-addpath([top_test_dir filesep '..' filesep 'matlab']);
-
-if ~debug
- % Test Dynare Version
- if ~strcmp(dynare_version(), getenv('DYNARE_VERSION'))
- error('Incorrect version of Dynare is being tested')
- end
-end
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'matlab']);
dynare_config;
-NumberOfTests = 0;
testFailed = 0;
if ~debug
@@ -25,12 +12,6 @@ if ~debug
disp('*** TESTING: riccatiupdate.m ***');
end
-if isoctave
- addpath([top_test_dir filesep '..' filesep 'mex' filesep 'octave']);
-else
- addpath([top_test_dir filesep '..' filesep 'mex' filesep 'matlab']);
-end
-
t0 = clock;
% Set the number of experiments for time measurement
@@ -64,7 +45,6 @@ tElapsed1 = toc;
disp(['Elapsed time for the Matlab Riccati update is: ' num2str(tElapsed1) ' (N=' int2str(N) ').'])
% 2. Update the state varance-covariance matrix with the mex routine
-NumberOfTests = NumberOfTests+1;
tElapsed2 = 0.;
Ptmp_fortran = P;
try
@@ -112,29 +92,6 @@ end
t1 = clock;
-if ~debug
- cd(getenv('TOP_TEST_DIR'));
-else
- dprintf('FAILED tests: %i', testFailed)
-end
-
-if isoctave
- fid = fopen('riccatiupdate.o.trs', 'w+');
-else
- fid = fopen('riccatiupdate.m.trs', 'w+');
-end
-if testFailed
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':list-of-failed-tests: riccatiupdate.m\n');
-else
- fprintf(fid,':test-result: PASS\n');
-end
-fprintf(fid,':number-tests: %i\n', NumberOfTests);
-fprintf(fid,':number-failed-tests: %i\n', testFailed);
-fprintf(fid,':elapsed-time: %f\n', etime(t1, t0));
-fclose(fid);
-
-if ~debug
- exit;
-end
+fprintf('\n*** Elapsed time (in seconds): %.1f\n\n', etime(t1, t0));
+quit(testFailed > 0)
diff --git a/tests/run_all_unit_tests.m b/tests/run_all_unit_tests.m
index 0a4c5ec00..d346a1ba0 100644
--- a/tests/run_all_unit_tests.m
+++ b/tests/run_all_unit_tests.m
@@ -15,28 +15,25 @@
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-top_test_dir = getenv('TOP_TEST_DIR');
-addpath([top_test_dir filesep 'utils']);
-addpath([top_test_dir filesep '..' filesep 'matlab']);
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'tests' filesep 'utils']);
+matlab_dir = [source_dir filesep 'matlab'];
+addpath(matlab_dir);
+
dynare_config();
if isoctave
load_octave_packages
end
-% Test Dynare Version
-if ~strcmp(dynare_version(), getenv('DYNARE_VERSION'))
- error('Incorrect version of Dynare is being tested')
-end
-
-mlist = get_directory_description('../matlab');
+mlist = get_directory_description(matlab_dir);
% Under Octave, do not run tests under matlab/missing/stats/
% Also skip load_m_data_file_legacy.m: it fails in the first test, but
% this is impossible to reproduce outside the runners.
if isoctave
- mlist = mlist(find(~strncmp('../matlab/missing/stats/', mlist, 24)));
- mlist = mlist(find(~strcmp('../matlab/load_m_file_data_legacy.m', mlist)));
+ mlist = mlist(find(~strncmp([matlab_dir filesep 'missing/stats/'], mlist, 24)));
+ mlist = mlist(find(~strcmp([matlab_dir filesep 'load_m_file_data_legacy.m'], mlist)));
end
% Set random seed, for reproducibility
@@ -49,14 +46,11 @@ end
failedtests = {};
-counter = 0;
-
for i = 1:length(mlist)
- f = [top_test_dir filesep mlist{i} ];
+ f = mlist{i};
if is_unit_test_available(f)
[check, info] = mtest(f);
for j = 1:size(info, 1)
- counter = counter + 1;
if ~info{j,3}
failedtests{length(failedtests)+1} = [ mlist{i} '#' num2str(info{j,2}) ];
end
@@ -64,24 +58,8 @@ for i = 1:length(mlist)
end
end
-cd(getenv('TOP_TEST_DIR'));
-if isoctave
- fid = fopen('run_all_unit_tests.o.trs', 'w+');
-else
- fid = fopen('run_all_unit_tests.m.trs', 'w+');
-end
if length(failedtests) > 0
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':number-tests: %d\n', counter);
- fprintf(fid,':number-failed-tests: %d\n', length(failedtests));
- fprintf(fid,':list-of-failed-tests: %s\n', failedtests{:});
-else
- fprintf(fid,':test-result: PASS\n');
- fprintf(fid,':number-tests: %d\n', counter);
- fprintf(fid,':number-failed-tests: 0\n');
-end
-fprintf(fid,':elapsed-time: %f\n',0.0);
-fclose(fid);
-if ~isoctave
- exit
+ fprintf('\n*** Failed tests: %s\n', failedtests{:})
end
+
+quit(length(failedtests) > 0)
diff --git a/tests/run_block_byte_tests_matlab.m b/tests/run_block_byte_tests_matlab.m
index c352784c1..d1b28e709 100644
--- a/tests/run_block_byte_tests_matlab.m
+++ b/tests/run_block_byte_tests_matlab.m
@@ -1,4 +1,4 @@
-% Copyright © 2011-2022 Dynare Team
+% Copyright © 2011-2023 Dynare Team
%
% This file is part of Dynare.
%
@@ -27,20 +27,14 @@
% block, because otherwise the next 'load wsMat' within a 'catch' block will
% overwrite the last exception.
-top_test_dir = getenv('TOP_TEST_DIR');
-addpath([top_test_dir filesep 'utils']);
-addpath([top_test_dir filesep '..' filesep 'matlab']);
-
-% Test Dynare Version
-if ~strcmp(dynare_version(), getenv('DYNARE_VERSION'))
- error('Incorrect version of Dynare is being tested')
-end
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'tests' filesep 'utils']);
+addpath([source_dir filesep 'matlab']);
% Test block_bytecode/ls2003.mod with various combinations of
% block/bytecode/solve_algo/stack_solve_algo
failedBlock = {};
-num_block_tests = 0;
-cd([top_test_dir filesep 'block_bytecode']);
+cd block_bytecode
has_optimization_toolbox = user_has_matlab_license('optimization_toolbox');
tic;
for blockFlag = 0:1
@@ -62,7 +56,6 @@ for blockFlag = 0:1
end
for i = 1:length(solve_algos)
- num_block_tests = num_block_tests + 1;
if ~blockFlag && storageFlag == 0 && (i == 1)
% This is the reference simulation path against which all
% other simulations will be tested
@@ -108,7 +101,6 @@ for blockFlag = 0:1
end
end
for i = 1:length(stack_solve_algos)
- num_block_tests = num_block_tests + 1;
try
old_path = path;
clear oo_ % Ensure that oo_.endo_simul won’t be overwritten when loading wsMat
@@ -135,20 +127,13 @@ for blockFlag = 0:1
end
end
end
-ecput = toc;
+
delete('wsMat.mat')
-cd(top_test_dir);
-fid = fopen('run_block_byte_tests_matlab.m.trs', 'w+');
+
if size(failedBlock,2) > 0
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':number-tests: %d\n', num_block_tests);
- fprintf(fid,':number-failed-tests: %d\n', size(failedBlock,2));
- fprintf(fid,':list-of-failed-tests: %s\n', failedBlock{:});
-else
- fprintf(fid,':test-result: PASS\n');
- fprintf(fid,':number-tests: %d\n', num_block_tests);
- fprintf(fid,':number-failed-tests: 0\n');
+ fprintf('\n*** Failed tests: %s\n', failedBlock{:})
end
-fprintf(fid,':elapsed-time: %f\n', ecput);
-fclose(fid);
-exit;
+
+fprintf('\n*** Elapsed time (in seconds): %.1f\n\n', toc);
+
+quit(size(failedBlock,2) > 0)
diff --git a/tests/run_block_byte_tests_octave.m b/tests/run_block_byte_tests_octave.m
index 5299732d9..55fd05434 100644
--- a/tests/run_block_byte_tests_octave.m
+++ b/tests/run_block_byte_tests_octave.m
@@ -1,4 +1,4 @@
-## Copyright © 2009-2022 Dynare Team
+## Copyright © 2009-2023 Dynare Team
##
## This file is part of Dynare.
##
@@ -24,20 +24,14 @@
## otherwise the newly created oo_ will be scratched upon loading,
## thus making the path comparison bogus.
-top_test_dir = getenv('TOP_TEST_DIR');
-addpath([top_test_dir filesep 'utils']);
-addpath([top_test_dir filesep '..' filesep 'matlab']);
-
-## Test Dynare Version
-if !strcmp(dynare_version(), getenv("DYNARE_VERSION"))
- error("Incorrect version of Dynare is being tested")
-endif
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'tests' filesep 'utils']);
+addpath([source_dir filesep 'matlab']);
## Test block_bytecode/ls2003.mod with various combinations of
## block/bytecode/solve_algo/stack_solve_algo
failedBlock = {};
-num_block_tests = 0;
-cd([top_test_dir filesep 'block_bytecode']);
+cd block_bytecode
tic;
for blockFlag = 0:1
for storageFlag = 0:2 % 0=M-file, 1=use_dll, 2=bytecode
@@ -62,7 +56,6 @@ for blockFlag = 0:1
endif
for i = 1:length(solve_algos)
- num_block_tests = num_block_tests + 1;
if !blockFlag && storageFlag == 0 && (i == 1)
## This is the reference simulation path against which all
## other simulations will be tested
@@ -105,7 +98,6 @@ for blockFlag = 0:1
endif
endfor
for i = 1:length(stack_solve_algos)
- num_block_tests = num_block_tests + 1;
try
old_path = path;
clear oo_ # Ensure that oo_.endo_simul won’t be overwritten when loading wsOct
@@ -130,22 +122,17 @@ for blockFlag = 0:1
endfor
endfor
endfor
-ecput = toc;
+
delete('wsOct');
-cd(top_test_dir);
-fid = fopen('run_block_byte_tests_octave.o.trs', 'w+');
+
if size(failedBlock,2) > 0
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':number-tests: %d\n', num_block_tests);
- fprintf(fid,':number-failed-tests: %d\n', size(failedBlock,2));
- fprintf(fid,':list-of-failed-tests: %s\n', failedBlock{:});
-else
- fprintf(fid,':test-result: PASS\n');
- fprintf(fid,':number-tests: %d\n', num_block_tests);
- fprintf(fid,':number-failed-tests: 0\n');
+ fprintf('\n*** Failed tests: %s\n', failedBlock{:})
end
-fprintf(fid,':elapsed-time: %f\n', ecput);
-fclose(fid);
+
+fprintf('\n*** Elapsed time (in seconds): %.1f\n\n', toc);
+
+quit(size(failedBlock,2) > 0)
+
## Local variables:
## mode: Octave
## End:
diff --git a/tests/run_kronecker_tests.m b/tests/run_kronecker_tests.m
index 1aede5d8c..bc34749dc 100644
--- a/tests/run_kronecker_tests.m
+++ b/tests/run_kronecker_tests.m
@@ -1,4 +1,4 @@
-% Copyright © 2021 Dynare Team
+% Copyright © 2021-2023 Dynare Team
%
% This file is part of Dynare.
%
@@ -15,8 +15,9 @@
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-top_test_dir = getenv('TOP_TEST_DIR');
-addpath([top_test_dir filesep '..' filesep 'matlab']);
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'matlab']);
+
dynare_config
cd kronecker
@@ -32,25 +33,12 @@ disp('')
disp('**** Testing A_times_B_kronecker_C MEX...')
info(3) = test_kron(3, num_procs);
-cd ..
-
-if isoctave
- ext = '.o.trs';
-else
- ext = '.m.trs';
-end
-fid = fopen([ 'run_kronecker_tests' ext ], 'w+');
num_failed_tests = sum(~info);
tests = { 'sparse1', 'sparse2', 'dense' };
failed_tests = tests(find(~info));
+
if num_failed_tests > 0
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':number-tests: 3\n');
- fprintf(fid,':number-failed-tests: %d\n', num_failed_tests);
- fprintf(fid,':list-of-failed-tests: %s\n', failed_tests{:});
-else
- fprintf(fid,':test-result: PASS\n');
- fprintf(fid,':number-tests: 3\n');
- fprintf(fid,':number-failed-tests: 0\n');
+ fprintf('\n*** Failed tests: %s\n', failed_tests{:})
end
-fclose(fid);
+
+quit(num_failed_tests > 0)
diff --git a/tests/run_reporting_test_matlab.m b/tests/run_reporting_test_matlab.m
index 349a0b27e..6c8bf22c0 100644
--- a/tests/run_reporting_test_matlab.m
+++ b/tests/run_reporting_test_matlab.m
@@ -1,4 +1,4 @@
-% Copyright © 2013-2022 Dynare Team
+% Copyright © 2013-2023 Dynare Team
%
% This file is part of Dynare.
%
@@ -15,21 +15,16 @@
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-top_test_dir = getenv('TOP_TEST_DIR');
-addpath([top_test_dir filesep '..' filesep 'matlab']);
-
-% Test Dynare Version
-if ~strcmp(dynare_version(), getenv('DYNARE_VERSION'))
- error('Incorrect version of Dynare is being tested')
-end
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'matlab']);
% To add default directories, empty dseries objects
-dynare_config
+dynare_config;
disp('');
disp(['*** TESTING: run_reporting_test_matlab.m ***']);
try
- cd([top_test_dir filesep 'reporting']);
+ cd reporting
db_a = dseries('db_a.csv');
db_q = dseries('db_q.csv');
dc_a = dseries('dc_a.csv');
@@ -40,18 +35,4 @@ catch
testFailed = true;
end
-cd(getenv('TOP_TEST_DIR'));
-fid = fopen('run_reporting_test_matlab.m.trs', 'w+');
-if testFailed
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':number-tests: 1\n');
- fprintf(fid,':number-failed-tests: 1\n');
- fprintf(fid,':list-of-failed-tests: run_reporting_test_matlab.m\n');
-else
- fprintf(fid,':test-result: PASS\n');
- fprintf(fid,':number-tests: 1\n');
- fprintf(fid,':number-failed-tests: 0\n');
-end
-fprintf(fid,':elapsed-time: %f\n',0.0);
-fclose(fid);
-exit;
+quit(testFailed)
diff --git a/tests/run_reporting_test_octave.m b/tests/run_reporting_test_octave.m
index d1fea8851..18f3eef8a 100644
--- a/tests/run_reporting_test_octave.m
+++ b/tests/run_reporting_test_octave.m
@@ -15,23 +15,18 @@
## You should have received a copy of the GNU General Public License
## along with Dynare. If not, see .
-top_test_dir = getenv('TOP_TEST_DIR');
-addpath([top_test_dir filesep 'utils']);
-addpath([top_test_dir filesep '..' filesep 'matlab']);
+source_dir = getenv('source_root');
+addpath([source_dir filesep 'tests' filesep 'utils']);
+addpath([source_dir filesep 'matlab']);
load_octave_packages
-## Test Dynare Version
-if !strcmp(dynare_version(), getenv("DYNARE_VERSION"))
- error("Incorrect version of Dynare is being tested")
-endif
-
## To add default directories, empty dseries objects
dynare_config();
printf("\n*** TESTING: run_reporting_test_octave.m ***\n");
try
- cd([top_test_dir filesep 'reporting']);
+ cd reporting
db_a = dseries('db_a.csv');
db_q = dseries('db_q.csv');
dc_a = dseries('dc_a.csv');
@@ -42,21 +37,7 @@ catch
testFailed = true;
end
-cd(getenv('TOP_TEST_DIR'));
-fid = fopen('run_reporting_test_octave.o.trs', 'w+');
-if testFailed
- fprintf(fid,':test-result: FAIL\n');
- fprintf(fid,':number-tests: 1\n');
- fprintf(fid,':number-failed-tests: 1\n');
- fprintf(fid,':list-of-failed-tests: run_reporting_test_octave.m\n');
-else
- fprintf(fid,':test-result: PASS\n');
- fprintf(fid,':number-tests: 1\n');
- fprintf(fid,':number-failed-tests: 0\n');
- fprintf(fid,':list-of-passed-tests: run_reporting_test_octave.m\n');
-end
-fprintf(fid,':elapsed-time: %f\n',0.0);
-fclose(fid);
+quit(testFailed)
## Local variables:
## mode: Octave