realroot_doc 0.1.1
polynomial_with_all_test.cpp
# include <realroot/GMP.hpp>
# include <realroot/monomial.hpp>
# include <realroot/polynomial_sparse.hpp>
# include <realroot/polynomial_dual.hpp>
# include <realroot/polynomial_bernstein.hpp>
# include <realroot/polynomial_tensor.hpp>

template<class POL> 
void test() {
  using namespace mmx;

  POL m0(1), m1(1,3), m2(2.1,2,3);
  std::cout<<m0<<std::endl;
  std::cout<<m1<<std::endl;
  std::cout<<m2
           <<"    nbvar: "<<m2.nbvar()
           <<", size: "<<m2.size()<<std::endl;
  POL s=m1+m2;
  std::cout<< s 
           <<"    nbvar: "<<(s).nbvar()
           <<", size: "<<(s).size()<<std::endl;
  std::cout<< m1-m2 <<std::endl;
  std::cout<< -m2 <<std::endl;
  std::cout<< m1*m2 <<std::endl;


  m1 *= 4.2;    std::cout<<m1<<std::endl;
  m1 += 3.1;    std::cout<<m1<<std::endl;
  m1 -= 2;      std::cout<<m1<<std::endl;

  std::cout<<"-----------"<<std::endl;

  POL p("a^2+b-2"); std::cout <<p<<std::endl;

  p  *= m1;      std::cout<<p<<std::endl;
  p  += m2;      std::cout<<p<<std::endl;
  p  -= m1;      std::cout<<p<<std::endl;

  //  POL p; std::cout <<p<<std::endl;
  //   q=p*p; std::cout<<q<<std::endl;

}
  

int main(int argc, char** argv) 
{
  using namespace mmx;

  test< polynomial< double, with<MonomialTensor> > >();
  test< polynomial< double, with<Bernstein> > >();
  test< polynomial< double, with<Sparse,Lex> > >();
  test< polynomial< double, with<Dual,DegRevLex> > >();

  typedef polynomial< double, with<Sparse,DegRevLex> >  Polynomial;
  typedef polynomial< double, with<Dual  ,DegRevLex> >  Dual;

  Polynomial p("x^2+y^2+2*x*y-1");  std::cout <<p<<std::endl;
  Dual       l("z^2-y*x+1");    std::cout <<l<<std::endl;

  std::cout <<l*p<<std::endl;
  std::cout <<p*l<<std::endl;


  std::cout<<"Evaluation:"<<std::endl;

  polynomial< double, with<Bernstein> > bb("1+2*x+x^2");
  std::cout <<bb<<std::endl;
  std::cout<< bb(1,1)<<std::endl;

  Polynomial bb2("2*x+1");
  std::cout <<bb2<<std::endl;
  std::cout<< bb2(1,1)<<std::endl;


  typedef ring< GMP::integer, Sparse, DegRevLex>::Polynomial PolZ;

  ring< double      , Sparse, DegRevLex>::Polynomial p1("2*x^2+1");;

  PolZ p2= as<PolZ>(p1);
  PolZ p3; let::assign(p3,p1);


//   q=p*p; std::cout<<q<<std::endl;
}