mirror of https://github.com/CGAL/cgal
119 lines
5.9 KiB
Plaintext
119 lines
5.9 KiB
Plaintext
*******************************************************************************
|
|
IMPORTANT NOTE: Currently, test_solver.cpp does not run the nonstandard-form
|
|
with all pricing strategies. Once these pricing strategies are implemented for
|
|
nonstandard-form problems, you should fix test_solver.cpp (see the line
|
|
beginning with the comment "// temporary (todo): exit if pricing strategy is
|
|
different from FE") and remove this note.
|
|
*******************************************************************************
|
|
|
|
This file describes the testsuite of package QP_solver.
|
|
|
|
THE CGAL TESTSUITE
|
|
|
|
What CGAL does for us is to compile and call every file in test/QP_solver that
|
|
ends in ".cpp". If for such a file a corresponding ".cin" file exits, the latter
|
|
is used as input. In our case, this means that the CGAL testsuite will
|
|
automatically perform the following commands:
|
|
|
|
./data_to_mps < data_to_mps.cin
|
|
./data_to_mps-double < data_to_mps-double.cin
|
|
./data_to_mps-rational < data_to_mps-rational.cin
|
|
./master_mps_to_derivatives
|
|
./test_MPS < test_MPS.cin
|
|
./test_solver < test_solver.cin
|
|
|
|
The main testing takes place in the last call: ./test_solver obtains from its
|
|
input test_solver.cin a list of names of MPS-files (together with some
|
|
additional parameters like a pricing strategy identifier and a verbosity
|
|
level) and solves each of these files. Consequently, in order to change or
|
|
update the QP_solver testsuite, you have to change the contents of the file
|
|
test_solver.cin and add additional MPS-files. The sequel tells you how to do
|
|
this.
|
|
|
|
|
|
THE DIRECTORY STRUCTURE
|
|
|
|
The MPS-files that are listed in test_solver.cin all reside in the directory
|
|
test_solver_data/. If you take a closer look at this directory, you see that
|
|
it contains two subdirectories, one called "masters" and one called
|
|
"derivatives". The idea behind this is that we put a new testcase into the
|
|
masters/ directory and then use this "master MPS-file" to machine-generate
|
|
some variants of this testcase; these variants (called "derivatives") are
|
|
stored in the derivatives/ directory. (The derivates are generated by the
|
|
./master_mps_to_derivatives program, which in turn is called from
|
|
./create_test_solver_cin, see below.)
|
|
|
|
The derivatives/ directory is a flat directory of derived MPS-files. In
|
|
contrast to this, the masters/ directory contains two subdirectories, cgal/
|
|
and additional/, and only these subdirectories contain MPS-files. This allows
|
|
us to run two testsuites: the files in cgal/ constitute the subset of
|
|
testcases that will be run by the CGAL testsuite. Some additional testcases
|
|
are contained in additional/; these might take long(er) to solve and are
|
|
therefore not suited for the CGAL testsuite.
|
|
|
|
|
|
THE ./create_test_solver_cin SCRIPT
|
|
|
|
The script ./create_test_solver_cin serves two purposes: it produces the file
|
|
test_solver.cin and generates from the master MPS-files the derivatives. A
|
|
call to the script should look like this:
|
|
|
|
./create_test_solver_cin CGAL|all verbosity
|
|
|
|
For instance, "./create_test_solver_cin CGAL 0" will collect all master
|
|
MPS-files in test_solver_data/masters/cgal/ and for each of them make sure
|
|
that all its derivatives are present (generating them if need be, see below);
|
|
finally, it collects a list of all these master and derivative filenames and
|
|
stores it in test_solver.cin. The test_solver.cin file obtained in this way
|
|
is what gets commited to the CGAL repository.
|
|
|
|
In contrast to this, "./create_test_solver_cin all 0" collects all master
|
|
MPS-files (i.e., all MPS-files in test_solver_data/masters/), generates (if
|
|
needed) the derivatives and puts the list of the names of all these files into
|
|
test_solver.cin. The resulting test_solver.cin should usually not be commited
|
|
to the CGAL repository (it takes too long to run this suite); so you would run
|
|
"./test_solver < test_solver.cin" only locally.
|
|
|
|
The ./create_test_solver_cin script is what you need for the daily QP_solver
|
|
work. If you add, for instance, a new testcase, "Test.mps", say, to
|
|
test_solver_data/masters/cgal/, you would call "./create_test_solver_cin CGAL
|
|
0" which will generate the derivatives ("Test_shifted.mps") of the newly added
|
|
testcase (and, by the way, warn you that you should commit these files to the
|
|
SVN repository) and construct the new test_solver.cin.
|
|
|
|
As a remark: if you start off with a ".data"-file (i.e., with "Test.data")
|
|
then you can solve this file by running
|
|
|
|
./data_to_mps "Simple testcase" "Simple" < Test.data | ./test_MPS 0
|
|
|
|
where the "0" argument is the verbosity (tune it up if need be).
|
|
|
|
|
|
HOW THE DERIVATIVES ARE GENERATED
|
|
|
|
The ./create_test_solver_cin script generates the derivates by calling the
|
|
program ./master_mps_to_derivatives (compiling the latter first, if
|
|
needed). The C++-program master_mps_to_derivatives.cpp reads in a master
|
|
MPS-file and generates all the derivatives. So if you want to add a new kind
|
|
of derivates then you should look into master_mps_to_derivatives.cpp; you
|
|
probably want to create a routine like create_shifted_instance(). Please do
|
|
name derived instances with a suffix (like "_shifted"); the prefix MUST stay
|
|
the same for the ./create_test_solver_cin script to work (see routine
|
|
create_output_file() in master_mps_to_derivatives.cpp).
|
|
|
|
Note that ./create_test_solver_cin is clever enough not to generate all
|
|
derivatives anew when you call it. Rather, it searches for all currently
|
|
known derivatives of a given master MPS-file and looks whether the master is
|
|
newer than any of the derivatives; if so, it regenerates the derivatives. (In
|
|
particular, this means that when you extend master_mps_to_derivatives.cpp to
|
|
output a new kind of derivatives, you first need to touch the masters by doing
|
|
|
|
touch test_solver_data/masters/cgal/*
|
|
touch test_solver_data/masters/additional/*
|
|
|
|
This will cause all derivatives to be generated anew.)
|
|
|
|
If you do not want derivatives to be generated for a given master
|
|
MPS-file, add the comment "Derivatives: none", see for instance
|
|
test_solver_data/masters/additional/QRECIPE.mps.
|