From 1da1f414cd71f10b2942c7e91e1a90bc42e5792b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Thu, 9 Jul 2020 18:37:55 +0200
Subject: [PATCH] Testsuite / External functions: add check for numerical
 results

(cherry picked from commit 5b88113668362c84c1f46c97fdde9f10bdde71b1)
---
 tests/Makefile.am                             | 20 +++++++++++++++++++
 tests/external_function/extfun_in_mlv.mod     | 11 ++++++++++
 .../first_and_2nd_deriv_given.mod             | 11 ++++++++++
 .../first_and_2nd_deriv_given_dll.mod         | 11 ++++++++++
 ...irst_and_2nd_deriv_given_dll_namespace.mod | 11 ++++++++++
 .../first_and_2nd_deriv_given_namespace.mod   | 11 ++++++++++
 tests/external_function/first_deriv_given.mod | 11 ++++++++++
 .../first_deriv_given_dll.mod                 | 11 ++++++++++
 tests/external_function/no_deriv_given.mod    | 11 ++++++++++
 .../external_function/no_deriv_given_dll.mod  | 11 ++++++++++
 10 files changed, 119 insertions(+)

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7c3f475f27..c86abc3857 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -180,6 +180,7 @@ MODFILES = \
 	dsge-var/simul_hybrid.mod \
 	dsge-var/dsgevar_forward_calibrated_lambda.mod \
 	dsge-var/dsgevar_forward_estimated_lambda.mod \
+	external_function/benchmark.mod \
 	external_function/first_deriv_given.mod \
 	external_function/first_deriv_given_dll.mod \
 	external_function/first_and_2nd_deriv_given.mod \
@@ -484,6 +485,25 @@ dsge-var/dsgevar_forward_estimated_lambda.m.trs: dsge-var/simul_hybrid.m.trs
 dsge-var/dsgevar_forward_calibrated_lambda.o.trs: dsge-var/simul_hybrid.o.trs
 dsge-var/dsgevar_forward_estimated_lambda.o.trs: dsge-var/simul_hybrid.o.trs
 
+external_function/first_deriv_given.m.trs: external_function/benchmark.m.trs
+external_function/first_deriv_given.o.trs: external_function/benchmark.o.trs
+external_function/first_deriv_given_dll.m.trs: external_function/benchmark.m.trs
+external_function/first_deriv_given_dll.o.trs: external_function/benchmark.o.trs
+external_function/first_and_2nd_deriv_given.m.trs: external_function/benchmark.m.trs
+external_function/first_and_2nd_deriv_given.o.trs: external_function/benchmark.o.trs
+external_function/first_and_2nd_deriv_given_dll.m.trs: external_function/benchmark.m.trs
+external_function/first_and_2nd_deriv_given_dll.o.trs: external_function/benchmark.o.trs
+external_function/first_and_2nd_deriv_given_namespace.m.trs: external_function/benchmark.m.trs
+external_function/first_and_2nd_deriv_given_namespace.o.trs: external_function/benchmark.o.trs
+external_function/first_and_2nd_deriv_given_dll_namespace.m.trs: external_function/benchmark.m.trs
+external_function/first_and_2nd_deriv_given_dll_namespace.o.trs: external_function/benchmark.o.trs
+external_function/no_deriv_given.m.trs: external_function/benchmark.m.trs
+external_function/no_deriv_given.o.trs: external_function/benchmark.o.trs
+external_function/no_deriv_given_dll.m.trs: external_function/benchmark.m.trs
+external_function/no_deriv_given_dll.o.trs: external_function/benchmark.o.trs
+external_function/extfun_in_mlv.m.trs: external_function/benchmark.m.trs
+external_function/extfun_in_mlv.o.trs: external_function/benchmark.o.trs
+
 smoother2histval/fs2000_simul.m.trs: smoother2histval/fs2000_smooth.m.trs
 smoother2histval/fs2000_simul.o.trs: smoother2histval/fs2000_smooth.o.trs
 
diff --git a/tests/external_function/extfun_in_mlv.mod b/tests/external_function/extfun_in_mlv.mod
index 3b3fddd99a..1b2947cff5 100644
--- a/tests/external_function/extfun_in_mlv.mod
+++ b/tests/external_function/extfun_in_mlv.mod
@@ -45,3 +45,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
diff --git a/tests/external_function/first_and_2nd_deriv_given.mod b/tests/external_function/first_and_2nd_deriv_given.mod
index 8726ed43c6..5c9623560c 100644
--- a/tests/external_function/first_and_2nd_deriv_given.mod
+++ b/tests/external_function/first_and_2nd_deriv_given.mod
@@ -44,3 +44,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
diff --git a/tests/external_function/first_and_2nd_deriv_given_dll.mod b/tests/external_function/first_and_2nd_deriv_given_dll.mod
index eb18b676cd..40ff04e6b3 100644
--- a/tests/external_function/first_and_2nd_deriv_given_dll.mod
+++ b/tests/external_function/first_and_2nd_deriv_given_dll.mod
@@ -44,3 +44,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
diff --git a/tests/external_function/first_and_2nd_deriv_given_dll_namespace.mod b/tests/external_function/first_and_2nd_deriv_given_dll_namespace.mod
index a868c4193a..bfeb03f206 100644
--- a/tests/external_function/first_and_2nd_deriv_given_dll_namespace.mod
+++ b/tests/external_function/first_and_2nd_deriv_given_dll_namespace.mod
@@ -46,3 +46,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
diff --git a/tests/external_function/first_and_2nd_deriv_given_namespace.mod b/tests/external_function/first_and_2nd_deriv_given_namespace.mod
index 1cefa83999..dc116d44a7 100644
--- a/tests/external_function/first_and_2nd_deriv_given_namespace.mod
+++ b/tests/external_function/first_and_2nd_deriv_given_namespace.mod
@@ -46,3 +46,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
diff --git a/tests/external_function/first_deriv_given.mod b/tests/external_function/first_deriv_given.mod
index ee2f3d99f6..5e8e7b172c 100644
--- a/tests/external_function/first_deriv_given.mod
+++ b/tests/external_function/first_deriv_given.mod
@@ -44,3 +44,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
diff --git a/tests/external_function/first_deriv_given_dll.mod b/tests/external_function/first_deriv_given_dll.mod
index 054a0cfb8c..47db02d2d9 100644
--- a/tests/external_function/first_deriv_given_dll.mod
+++ b/tests/external_function/first_deriv_given_dll.mod
@@ -44,3 +44,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-12
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
diff --git a/tests/external_function/no_deriv_given.mod b/tests/external_function/no_deriv_given.mod
index a35d08b8cd..164e152c5a 100644
--- a/tests/external_function/no_deriv_given.mod
+++ b/tests/external_function/no_deriv_given.mod
@@ -44,3 +44,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-9
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-9
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
diff --git a/tests/external_function/no_deriv_given_dll.mod b/tests/external_function/no_deriv_given_dll.mod
index 6a67835792..4503857328 100644
--- a/tests/external_function/no_deriv_given_dll.mod
+++ b/tests/external_function/no_deriv_given_dll.mod
@@ -44,3 +44,14 @@ var e, u = phi*0.009*0.009;
 end;
 
 stoch_simul;
+
+L = load('benchmark_results.mat');
+if max(max(abs(L.oo_.dr.ghu - oo_.dr.ghu))) > 1e-9
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.dr.ghx - oo_.dr.ghx))) > 1e-9
+  error('Failure in external function')
+end
+if max(max(abs(L.oo_.var - oo_.var))) > 1e-12
+  error('Failure in external function')
+end
-- 
GitLab