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); }
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 ); }); }