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

#include <iostream>
#include <fstream>
#include <list>

using namespace std; // Если этой строчки нет перед включенными файлами, то ошибка

#include "polynom.h"
#include "link.h"

polynom<int> get_Jones_polynom_of_knots_from_table(ifstream& in)
{
  polynom<int> p;
  string name;
  int i, d, common_divisor, num;
  list<int> l;
  in >> name >> num >> common_divisor;
  for(i = 0; i < num; i++)
  {
    in >> d;
    l.push_back(d);
  }
  p = polynom<int>(l, 0);
  p = multiply_q(p, common_divisor);
  
  cout << name << "\n";
  
  // Так как у меня полином Джонса не от t, а от sqrt(t)
  return another_variable(p);
}

void read_and_write_link(char* filename, ifstream& in, bool compare_with_table_polynom = false)
{
  ifstream iin(filename);
  int i, j, component_number, point_number, x, y;
  list<point> point_list;
  string intersections;
  vector<link_component> components;
  iin >> component_number;
  for(i = 0; i < component_number; i++)
  {
    iin >> point_number;
    for(j = 0; j < point_number; j++)
    {
      iin >> x >> y;
      point_list.push_back(make_pair(x, y));
    }
    iin >> intersections;
    components.push_back(link_component(point_list, intersections));
    point_list.clear();
  }
  link L(components);
//  cout << L;

  polynom<int> ans = L.Graph.getJonesPolynom(); 
  if(compare_with_table_polynom)
  {
    polynom<int> table_polynom = get_Jones_polynom_of_knots_from_table(in);
    cout << "table polynom=\n" << table_polynom << "\n";
    assert(ans == table_polynom);
  }
  cout << "L.Graph.getJonesPolynom()=\n" << ans << "\n\n\n";
}

int main()
{
  making_polynoms();


  ifstream Jiin("src\\links\\table_knots_JonesPolynom.txt");
  
  read_and_write_link("src\\001", Jiin, 1);
  read_and_write_link("src\\002", Jiin, 1);
  read_and_write_link("src\\003", Jiin, 1);
  read_and_write_link("src\\004", Jiin, 1);
  read_and_write_link("src\\005", Jiin, 1);
  read_and_write_link("src\\006", Jiin, 1);
  read_and_write_link("src\\007", Jiin, 1);
  read_and_write_link("src\\008", Jiin, 1);
  read_and_write_link("src\\009", Jiin, 1);
  read_and_write_link("src\\010", Jiin, 1);
  read_and_write_link("src\\011", Jiin, 1);
  read_and_write_link("src\\012", Jiin, 1);
  read_and_write_link("src\\013", Jiin, 1);
  read_and_write_link("src\\014", Jiin, 1);
  read_and_write_link("src\\015", Jiin);
  read_and_write_link("src\\016", Jiin);
  read_and_write_link("src\\017", Jiin);
  read_and_write_link("src\\018", Jiin);
  read_and_write_link("src\\019", Jiin);
  read_and_write_link("src\\020", Jiin);
  read_and_write_link("src\\021", Jiin);
  read_and_write_link("src\\022", Jiin);

/*
  read_and_write_link("src\\links\\comp1\\t1.in", Jiin);
  read_and_write_link("src\\links\\comp1\\t2.in", Jiin);
  read_and_write_link("src\\links\\comp2\\link2_0.in", Jiin);
  read_and_write_link("src\\links\\comp2\\link2_1.in", Jiin);
  read_and_write_link("src\\links\\comp2\\link2_2.in", Jiin);
*/


  return 0;
}








