#include <kv/autodif.hpp>

template <class T> T f(const T& x) {
	T tmp;

	tmp = x * x - 1.;
	return cos(tmp + sin(tmp));
}

int main()
{
	kv::autodif<double> a1, a2;
	double d1, d2;

	a1 = kv::autodif<double>::init(1.5);

	a2 = f(a1);

	kv::autodif<double>::split(a2, d1, d2);

	std::cout << d1 << "\n"; // f(1.5)
	std::cout << d2 << "\n"; // f'(1.5)

	d1 = 1.5;
	d2 = testfunc2(d1); // double can be also passed
	std::cout << d2 << "\n"; // f(1.5)
}
