#include <iostream>
using namespace std;


#include <probparab.h>
#include <lineoptimizergold.h>
// #includ <lineoptimizergold2.h>
#include <lineoptimizerparabola.h>

#include <lineoptimizergoldtest.h>
#include <linepath_d1.h>

void lineoptimizergoldtest01()
{
  cout << "Testing the golden ratio line optimizer." << endl;
  //cout << "

  double d1[] = {0.0,1.0,1.0};
  double x0[] = {0.0,0.0,0.0};
  probparab2 fn;
  lineoptimizergold<probparab2&,double*,double*,double> 
    opt(3,fn,fn.xi,x0,d1);

  opt.reset(0.0,5.0);
  for (uint i=0; i<10; ++i)
  {
    ++opt;
    opt.printstate();
  }

  cout << SHOW(fn.counter) << endl;
}

/*
void lineoptimizergoldtest02()
{
  cout << "Testing the golden ratio line optimizer." << endl;
  //cout << "

  double d1[] = {0.0,1.0,1.0};
  double x0[] = {0.0,0.0,0.0};
  probparab2 fn;
  typedef linepath_d1< probparab2 & ,double*,double*,double> lpth;
  lineoptimizergold2< lpth ,double> 
    opt( lpth(3,fn,fn.xi,x0,d1) );

  opt.reset(0.0,5.0);
  for (uint i=0; i<10; ++i)
  {
    ++opt;
    opt.printstate();
  }
  cout << SHOW(fn.counter) << endl;
}


void lineoptimizergoldtest03()
{
  cout << "Testing the golden ratio line optimizer." << endl;
  //cout << "

  double d1[] = {0.0,1.0,1.0};
  double x0[] = {0.0,0.0,0.0};
  probparab2 fn;
  typedef linepath_d1<probparab2&,double*,double*,double> lpth;
  lineoptimizerparabola<lpth,double> 
    opt( lpth(3,fn,fn.xi,x0,d1) );

  opt.reset(0.0,5.0);
  for (uint i=0; i<3; ++i)
  {
    ++opt;
    opt.printstate();
  }
  cout << SHOW(fn.counter) << endl;
}

   
void lineoptimizergoldtest04()
{


}

*/



