#include <kv/optimize.hpp>

struct Func {
	template <class T> T operator() (const T& x){
		return sin(x) + log(x);
	}
};

typedef kv::interval<double> itv;

int main()
{
	std::list<itv> result;
	std::list<itv>::iterator p;

	std::cout.precision(17);

	result = minimize(itv(1,10), Func(), 10000);
	p = result.begin();
	while (p != result.end()) {
		std::cout << *(p++) << "\n";
	}

	std::cout <<  minimize_value(itv(1,10), Func(), 10000) << "\n";

	result = maximize(itv(1,10), Func(), 10000);
	p = result.begin();
	while (p != result.end()) {
		std::cout << *(p++) << "\n";
	}

	std::cout <<  maximize_value(itv(1,10), Func(), 10000) << "\n";
}
