// В этом файле тестирование класса polynom, который включен в чекер (непосредственно в задаче он не используется)

using namespace std;

#include "polynom.h"

// Полиномы, используемые в формуле для полинома Джонса
// p=1
polynom<int> one; 
// p = q^2
polynom<int> q_in_plus_2;
// p = q^(-2)
polynom<int> q_in_minus_2;
// p = q
polynom<int> q_in_plus_1;
// p = q^(-1)
polynom<int> q_in_minus_1;
// p = q - q^(-1)
polynom<int> q_in_plus_1_minus_q_in_minus_1;
// p = q + q^(-1)
polynom<int> q_in_plus_1_plus_q_in_minus_1;



void polynom_testing()
{
  int i;
  list<int> l;
  for(i = 0; i < MAX_polynom_size; i++)
    l.push_back(i + 1);
  polynom<int> p1(l);
  
  cout << "P(q)=" << p1;
  
  //polynom<int> pa1 = multiply_q(p1, 1); //(должно падать на assert)
  
  //polynom<int> pa2 = multiply_q(p1, -1); //(должно падать на assert)
  
  l.clear();
  l.push_back(0);
  l.push_back(0);
  l.push_back(0);
  l.push_back(1);
  l.push_back(2);
  l.push_back(3);
  l.push_back(4);
  l.push_back(5);

  polynom<int> p2(l);
  cout << "\nP(q)=" << p2;
  polynom<int> p3 = 2 * p2;
  cout << "\nP(q)=" << p3;
  polynom<int> p4 = 2 * multiply_q(p2, 3);
  cout << "\nP(q)=" << p4;
  polynom<int> p5 = -2 * multiply_q(p2, -3);
  cout << "\nP(q)=" << p5;
}

void making_polynoms()
{
  list<int> l;
  
  l.push_back(1);
  one = polynom<int>(l, 0);
  l.clear();

  l.push_back(1);
  q_in_plus_2 = polynom<int>(l, 2);
  l.clear();

  l.push_back(1);
  q_in_minus_2 = polynom<int>(l, -2);
  l.clear();

  l.push_back(1);
  q_in_plus_1 = polynom<int>(l, 1);
  l.clear();

  l.push_back(1);
  q_in_minus_1 = polynom<int>(l, -1);
  l.clear();

  l.push_back(-1);
  l.push_back(0);
  l.push_back(1);
  q_in_plus_1_minus_q_in_minus_1 = polynom<int>(l, -1);
  l.clear();

  l.push_back(1);
  l.push_back(0);
  l.push_back(1);
  q_in_plus_1_plus_q_in_minus_1 = polynom<int>(l, -1);
  l.clear();
}

int main()
{
  making_polynoms();

  list<int> l;
  
  l.push_back(0);
  l.push_back(-1);
  l.push_back(0);
  l.push_back(0);
  l.push_back(0);
  l.push_back(-1);
  polynom<int> p2 = polynom<int>(l, 0);
  l.clear();
  cout << "p2=" << p2 << "\n";
  
  l.push_back(0);
  l.push_back(0);
  l.push_back(1);
  l.push_back(0);
  l.push_back(0);
  l.push_back(0);
  l.push_back(1);
  l.push_back(0);
  l.push_back(-1);
  polynom<int> p0 = polynom<int>(l, 0);
  l.clear();
  cout << "p0=" << p0 << "\n";

  polynom<int> p3 = (q_in_plus_2 * p2 + q_in_plus_1_minus_q_in_minus_1 * p0) * q_in_plus_2;

  cout << "p3=" << p3 << "\n";


//  polynom_testing();




  return 0;
}








