TEST(Function, HessianTest)
{
	corecvs::Vector in(2);
	in[0] = 3;
	in[1] = 5;
	auto H = TestFunctor().getHessians(in)[0];
	/*
	 * f(x, y) = 2x^2+y+10xy
	 * f_xx = 4
	 * f_xy = 10
	 * f_yy = 0
	 */
	ASSERT_NEAR(H.a(0, 0),  4.0, 1e-4);
	ASSERT_NEAR(H.a(0, 1), 10.0, 1e-4);
	ASSERT_NEAR(H.a(1, 1),  0.0, 1e-4);
	ASSERT_NEAR(H.a(1, 0), 10.0, 1e-4);
}
Exemple #2
0
void flippedTests(stest::TestCollector& col)
{
  col.addTest("sfp_flipped_misc", []()->void {
    typedef int (*FuncType)(int i, std::string s);
    Flipped<FuncType> flippedTestFunc(testFunc);
    BOOST_CHECK_EQUAL(flippedTestFunc("hello", 3), 3);

    // Check that a polymorphic functor retains its polymorphism.
    Flipped<TestFunctor> flippedTestFunctor =
        Flipped<TestFunctor>(TestFunctor());

    BOOST_CHECK_EQUAL(flippedTestFunctor(3, "hello"), 2);
    BOOST_CHECK_EQUAL(flippedTestFunctor("hello", 3), "First");

    // Check that lambda functions work.
    const auto f = [](int, std::string s) { return s; };
    Flipped<decltype(f)> flippedLambda(f);
    BOOST_CHECK_EQUAL(flippedLambda("three", 3), "three");
  });
  col.addTest("sfp_flipped_example", []()->void {
    typedef sfp::Flipped<std::minus<int>> Subtract;
    BOOST_CHECK_EQUAL( Subtract()(3, 4), 1 );
  });
}