#include <iostream>
#include "grafo.h"
using namespace std;

int main(){

        // PRIMA PARTE
	    // 1.1 test costruttore e operatore di uscita
	    cout<<"Test del costruttore e dell'operatore di uscita"<<endl;
        Grafo g(6);    // crea un Grafo con 6 nodi, senza archi
		g.stampa();     // mostra a video il grafo senza archi appena costruito
        cout<<endl;

		// 1.2 test aggiungiArco
		cout<<"Test della funzione aggiungiArco"<<endl;
		g.aggiungiArco(1,6); // successo
		g.aggiungiArco(5,2); // successo
		g.aggiungiArco(4,4); // successo
		g.stampa();
        cout<<endl;

		// 1.3 test eliminaArco
		cout<<"Test della funzione eliminaArco"<<endl;
		if (!g.eliminaArco(5,2))  // successo, non stampa nulla!
			{cout<<"Eliminazione dell'arco (5,2) fallita: arco non presente"<<endl;
                g.stampa();
                cout<<endl;
                }
		if (!g.eliminaArco(3,5))  // fallisce: arco non presente, quindi stampa!
			{cout<<"Eliminazione dell'arco (3,5) fallita: arco non presente"<<endl;
                g.stampa();
                cout<<endl;
                }

		// SECONDA PARTE

		// 2.1 test del distruttore
		{
			Grafo g2(3);
			g2.aggiungiArco(1,3);
			cout<<"g2 sta per essere distrutto"<<endl;
		}

		// 2.2 test operator %
		if (g%5)
			cout<<"Il nodo 5 e' isolato"<<endl; // questa è la risposta esatta
		else
			cout<<"Il nodo 5 e' NON isolato"<<endl;

		// 2.3 test invertiArchi
		cout<<"Grafo di partenza"<<endl;
		g.aggiungiArco(2,3);
		g.eliminaArco(1,6);
		g.stampa();
		cout<<endl;
		cout<<"Grafo con archi invertiti"<<endl;
		g.invertiArchi();
		g.stampa();
        cout<<endl;

		// 2.4 test operatore !
		g.aggiungiArco(2,3);
		if (!g)
        {
         cout<<"Il seguente Grafo e' NON orientato:"<<endl; // questa è la risposta esatta
			g.stampa();
			cout<<endl;
        }
		else{
			cout<<"Il seguente Grafo e' orientato:"<<endl;
			g.stampa();
			cout<<endl;
		}


        return 0;
}
