1 // This is core/vnl/io/tests/test_nonlinear_minimizer_io.cxx
2 #include <iostream>
3 #include "vnl/vnl_nonlinear_minimizer.h"
4 #include <vnl/io/vnl_io_nonlinear_minimizer.h>
5 #include "testlib/testlib_test.h"
6 #include "vpl/vpl.h"
7 
8 void
test_nonlinear_minimizer_io()9 test_nonlinear_minimizer_io()
10 {
11   std::cout << "**********************************\n"
12             << "Testing vnl_nonlinear_minimizer_io\n"
13             << "**********************************\n";
14 
15   //// test constructors, accessors
16   vnl_nonlinear_minimizer minimizer_out, minimizer_in;
17 
18   // minimizer settings to be saved
19   double xtol_out = 0.001;
20   double ftol_out = xtol_out * 0.01;
21   double gtol_out = 0.005;
22   int maxfev_out = 3000;
23   double epsfcn_out = xtol_out * 0.001;
24   bool trace_out = false;
25   bool verbose_out = false;
26   int cd_out = 1;
27 
28   minimizer_out.set_f_tolerance(ftol_out);
29   minimizer_out.set_x_tolerance(xtol_out);
30   minimizer_out.set_g_tolerance(gtol_out);
31   minimizer_out.set_max_function_evals(maxfev_out);
32   minimizer_out.set_epsilon_function(epsfcn_out);
33   minimizer_out.set_trace(trace_out);
34   minimizer_out.set_verbose(verbose_out);
35   minimizer_out.set_check_derivatives(cd_out);
36 
37   vsl_print_summary(std::cout, minimizer_out);
38   std::cout << std::endl;
39 
40   vsl_b_ofstream bfs_out("vnl_nonlinear_minimizer_io.bvl.tmp");
41   TEST("Created vnl_nonlinear_minimizer_test_io.bvl.tmp for writing", (!bfs_out), false);
42   vsl_b_write(bfs_out, minimizer_out);
43   bfs_out.close();
44 
45   vsl_b_ifstream bfs_in("vnl_nonlinear_minimizer_io.bvl.tmp");
46   TEST("Opened vnl_nonlinear_minimizer_test_io.bvl.tmp for reading", (!bfs_in), false);
47   vsl_b_read(bfs_in, minimizer_in);
48   TEST("Finished reading file successfully", (!bfs_in), false);
49   bfs_in.close();
50 
51   vpl_unlink("vnl_nonlinear_minimizer_io.bvl.tmp");
52 
53   double ftol_in = minimizer_in.get_f_tolerance();
54   double xtol_in = minimizer_in.get_x_tolerance();
55   double gtol_in = minimizer_in.get_g_tolerance();
56   int maxfev_in = minimizer_in.get_max_function_evals();
57   double epsfcn_in = minimizer_in.get_epsilon_function();
58   bool trace_in = minimizer_in.get_trace();
59   bool verbose_in = minimizer_in.get_verbose();
60   int cd_in = minimizer_in.get_check_derivatives();
61 
62   TEST("ftol_in == ftol_out", ftol_in == ftol_out, true);
63   TEST("xtol_in == xtol_out", xtol_in == xtol_out, true);
64   TEST("gtol_in == gtol_out", gtol_in == gtol_out, true);
65   TEST("maxfev_in == maxfev_out", maxfev_in == maxfev_out, true);
66   TEST("epsfcn_in == epsfcn_out", epsfcn_in == epsfcn_out, true);
67   TEST("trace_in == trace_out", trace_in == trace_out, true);
68   TEST("verbose_in == verbose_out", verbose_in == verbose_out, true);
69   TEST("cd_in == cd_out", cd_in == cd_out, true);
70 
71   vsl_print_summary(std::cout, minimizer_in);
72   std::cout << std::endl;
73 }
74 
75 TESTMAIN(test_nonlinear_minimizer_io);
76