00001 #include "OptimizerFactory.h"
00002 #include "Optimizer.h"
00003
00004 #define BOOST_TEST_MODULE MertOptimizerFactory
00005 #include <boost/test/unit_test.hpp>
00006 #include <boost/scoped_ptr.hpp>
00007
00008 using namespace MosesTuning;
00009
00010 namespace
00011 {
00012
00013 inline bool CheckBuildOptimizer(unsigned dim,
00014 const std::vector<unsigned>& to_optimize,
00015 const std::vector<bool>& positive,
00016 const std::vector<parameter_t>& start,
00017 const std::string& type,
00018 unsigned int num_random)
00019 {
00020 boost::scoped_ptr<Optimizer> optimizer(OptimizerFactory::BuildOptimizer(dim, to_optimize, positive, start, type, num_random));
00021 return optimizer.get() != NULL;
00022 }
00023
00024 }
00025
00026 BOOST_AUTO_TEST_CASE(optimizer_type)
00027 {
00028 BOOST_CHECK_EQUAL(OptimizerFactory::GetOptimizerType("powell"),
00029 OptimizerFactory::POWELL);
00030 BOOST_CHECK_EQUAL(OptimizerFactory::GetOptimizerType("random"),
00031 OptimizerFactory::RANDOM);
00032 BOOST_CHECK_EQUAL(OptimizerFactory::GetOptimizerType("random-direction"),
00033 OptimizerFactory::RANDOM_DIRECTION);
00034 }
00035
00036 BOOST_AUTO_TEST_CASE(optimizer_build)
00037 {
00038 const unsigned dim = 3;
00039 std::vector<unsigned> to_optimize;
00040 to_optimize.push_back(1);
00041 to_optimize.push_back(2);
00042 to_optimize.push_back(3);
00043 std::vector<parameter_t> start;
00044 start.push_back(0.3);
00045 start.push_back(0.1);
00046 start.push_back(0.2);
00047 const unsigned int num_random = 1;
00048 std::vector<bool> positive(dim);
00049 for (unsigned int k = 0; k < dim; k++)
00050 positive[k] = false;
00051
00052 BOOST_CHECK(CheckBuildOptimizer(dim, to_optimize, positive, start, "powell", num_random));
00053 BOOST_CHECK(CheckBuildOptimizer(dim, to_optimize, positive, start, "random", num_random));
00054 BOOST_CHECK(CheckBuildOptimizer(dim, to_optimize, positive, start, "random-direction", num_random));
00055 }