// Scheletro di codice per il progetto 2023

// In questo file NON ci deve essere nessuna dichiarazione "package"
// come per esempio
//
//	    package progetto;

// Potete aggiungere qui altri "import" per usare le librerie
// standard di Java (ad es. lo Scanner).

import java.io.*;
import java.util.Scanner;

// Opzionale, ma raccomandato. 
import progetto2023.Helper;

// NON modificate in nessun modo la linea seguente
public class Progetto {

	// Qui potete liberamente aggiungere altre funzioni / procedure.
	
	// Se volete, qui potete anche inserire variabili globali.
	// Se decidete di inserirle, dovete fare in modo che le funzioni
	//     polyMultiply
	//     polyApply
	// inizializzino tali variabili **ogni volta** che vengono chiamate.
	// Inizializzarle una volta sola nel main NON basta, visto che le
	// funzioni verranno chiamate piu` volte.
	

	// NON modificate in nessun modo la linea seguente
	public static void polyMultiply(String polyFileName1, String polyFileName2, String polyFileNameResult) {
		// Qui potete inserire il vostro codice, modificando lo stub esistente.
	}

	// NON modificate in nessun modo la linea seguente
	public static void polyApply(String polyFileName1, long val, String polyFileNameResult){
		// Qui potete inserire il vostro codice, modificando lo stub esistente.
	}


	// Potete modificare il main liberamente. Potete per esempio eseguire
	// qualche test sulla funzione sopra, come quelli suggeriti sotto.
	// Ricordatevi che chi corregge il progetto NON eseguira` il vostro
	// main, ma i propri test.
	// 
	public static void main(String[] args) {
		Helper.setSeed(28486); // Da cambiare per effettuare altri test
		int testAmount = 500;
		
		// Test semplice per moltiplicazione
		for ( int i = 0; i< testAmount; i ++ ){
			String poly1 = "poly1.txt";
			String poly2 = "poly2.txt";
			String result= "result.txt";
			Helper.genPolySimple(poly1);
			Helper.genPolySimple(poly2);
			polyMultiply(poly1, poly2, result);
			if ( ! Helper.testMultiply(poly1, poly2, result) ){
				System.out.println("\nTest NON superato, per il seguente motivo:");
				Helper.stampaErrore();
				System.out.println("I polinomi che restituiscono errore sono salvati nei file poly1.txt e poly2.txt");
				return;
			}
		}
		
		// Test semplice per applicazione
		for ( int i = 0; i< testAmount; i ++ ){
			String poly = "poly1.txt";
			String result= "result.txt";
			Helper.genPolySimple(poly);
			long val = Helper.genValueApply();
			polyApply(poly, val, result);
			if ( ! Helper.testApply(poly, val, result) ){
				System.out.println("Test NON superato, per il seguente motivo:");
				Helper.stampaErrore();
				System.out.println("I polinomi che restituiscono errore sono salvati nei file poly1.txt e poly2.txt");
				return;
			}
		}

		// Test per moltiplicazione
		for ( int i = 0; i< testAmount; i ++ ){
			String poly1 = "poly1.txt";
			String poly2 = "poly2.txt";
			String result= "result.txt";
			Helper.genPolyMultiply(poly1);
			Helper.genPolyMultiply(poly2);
			polyMultiply(poly1, poly2, result);
			if ( ! Helper.testMultiply(poly1, poly2, result) ){
				System.out.println("Test NON superato, per il seguente motivo:");
				Helper.stampaErrore();
				System.out.println("I polinomi che restituiscono errore sono salvati nei file poly1.txt e poly2.txt");
				return;
			}
		}
		
		// Test per applicazione
		for ( int i = 0; i< testAmount; i ++ ){
			String poly = "poly1.txt";
			String result= "result.txt";
			Helper.genPolyApply(poly);
			long val = Helper.genValueApply();
			polyApply(poly, val, result);
			if ( ! Helper.testApply(poly, val, result) ){
				System.out.println("Test NON superato, per il seguente motivo:");
				Helper.stampaErrore();
				System.out.println("I polinomi che restituiscono errore sono salvati nei file poly1.txt e poly2.txt");
				return;
			}
		}
		
		System.out.println("Tutti i test superati");
	}
}

