/*----
  signature: main: void -> int
  purpose: testing program for the class Team
           (version created FIRST, before adding
           the needed destructor, copy constructor,
           and overloaded assignment operator)

  compile using:
      g++ Team-test.cpp Team.cpp PlayerChar.cpp -o Team-test

  run using:
      ./Team-test

  by: Sharon Tuttle
  last modified: 2022-10-12 
----*/

#include <cstdlib>
#include <iostream>
#include <string>
#include <cmath>
#include "PlayerChar.h"
#include "Team.h"
using namespace std;

int main()
{
    cout << boolalpha;

    cout << endl;
    cout << "*** Testing class Team ***"
         << endl << endl;

    // testing constructors and accessors

    cout << "constructors' and accessors' tests:" << endl;

    Team ex_team1;
    Team ex_team2("Example2", 2);

    cout << ( (ex_team1.get_name() == "")
              && (ex_team1.get_size() == 4)
              && (ex_team1.get_player(1).get_strength() == 5)
              && (ex_team1.get_player(2).get_strength() == 5)
              && (ex_team1.get_player(3).get_strength() == 5)
              && (ex_team1.get_player(4).get_strength() == 5) )
         << endl;

    cout << ( (ex_team2.get_name() == "Example2")
              && (ex_team2.get_size() == 2)
              && (ex_team2.get_player(1).get_hp() == 20)
              && (ex_team2.get_player(2).get_hp() == 20) )
         << endl;

    // test mutators

    cout << endl;
    cout << "mutators' tests: " << endl;

    ex_team2.set_name("Example2New");

    cout << (ex_team2.get_name() == "Example2New") << endl;

    PlayerChar angie("Angie", 10, 2.7, "tank", 15);             
    PlayerChar sven("Sven", 5, 3.1, "support", 14);
    
    ex_team2.set_player(angie, 1);
    ex_team2.set_player(sven, 2);
   
    cout << ( (ex_team2.get_player(1).get_name() == angie.get_name())
              && (ex_team2.get_player(1).get_strength() ==
                  angie.get_strength())
              && (ex_team2.get_player(1).get_exp() ==
                  angie.get_exp())
              && (ex_team2.get_player(1).get_role() ==
                  angie.get_role())
              && (ex_team2.get_player(1).get_hp() ==
                  angie.get_hp())) << endl;

    cout << ( (ex_team2.get_player(2).get_name() == sven.get_name())
              && (ex_team2.get_player(2).get_strength() ==
                  sven.get_strength())
              && (ex_team2.get_player(2).get_exp() ==
                  sven.get_exp())
              && (ex_team2.get_player(2).get_role() ==
                  sven.get_role())
              && (ex_team2.get_player(2).get_hp() ==
                  sven.get_hp())) << endl;
    
    // then, test your "other" methods

    cout << "\ntesting \"other\" methods:" << endl;

    cout << "\ntesting display:" << endl;

    cout << "\ntest succeeds if you see team name that's empty, size of 4,"
         << "\n    and four players each with an empty name,"
         << "\n    strength 5, exp 0, empty role, and hp 20: " << endl;

    Team a_team;

    a_team.display();

    cout << "test succeeds if you see name of Example2New, "
         << "\n    size of 2, and two players,"
         << "\n    *   Angie with strength 10, exp 2.7, role tank, "
         << "\n        and hp 15, and"
         << "\n    *   Sven with strength 5, exp 3.1, role support, "
         << "\n        and hp 14:" << endl;

    ex_team2.display();

    cout << "testing is_bigger_than:" << endl;
    
    Team team1("Team 1", 2);
    Team team2("Team 2", 3);

    cout << (team1.is_bigger_than(team2) == false) << endl;
    cout << (team2.is_bigger_than(team1) == true) << endl;
    cout << (team1.is_bigger_than(team1) == false) << endl;

    cout << endl;
    return EXIT_SUCCESS;
}