/*
 * Viikkoharjoitus 5, tehtävä 5.
 *
 * Olio-ohjelmoinnin perusteet I, kevät 2020.
 *
 * Geneeristä paria testaava luokka.
 *
 * Jorma Laurikkala (jorma.laurikkala@tuni.fi).
 *
 */

public class PariTesti {
   public static void main(String[] args) {
      // Kiinnitetään molempien tyyppiparametrien arvoiksi String.
      Pari<String, String> pari1 = new Pari<String, String>("first", "second");
      String arvo11 = pari1.ensimmäinen();
      String arvo12 = pari1.toinen();
      System.out.println(arvo11);                     // first
      System.out.println(arvo12);                     // second
      pari1.ensimmäinen(arvo12);
      pari1.toinen(arvo11);
      System.out.println(pari1.ensimmäinen());        // second
      System.out.println(pari1.toinen());             // first

      // Kiinnitetään ensimmäisen tyyppiparametrin arvoksi Integer ja toisen
      // tyyppiparametrin arvoksi Double. Java muuntaa rakentajalle ja asettaville
      // aksessoreille annetut alkeistyyppiset arvot automaattisesti kääretyyppisiksi
      // olioiksi ja purkaa kääreoliot alkeistyyppisiksi arvoiksi, kun lukuaksessoreiden
      // arvot sijoitetaan alkeistyyppisiin arvoihin.
      Pari<Integer, Double> pari2 = new Pari<Integer, Double>(1, 2.0);
      int arvo21 = pari2.ensimmäinen();
      double arvo22 = pari2.toinen();
      System.out.println(arvo21);                     // 1
      System.out.println(arvo22);                     // 2.0
      pari2.ensimmäinen(3);
      pari2.toinen(4.0);
      System.out.println(pari2.ensimmäinen());        // 3
      System.out.println(pari2.toinen());             // 4.0

      // Tarkistetaan, että null-arvot kelpaavat.
      Pari<Float, Long> pari3 = new Pari<Float, Long>(1F, 2L);
      pari3.ensimmäinen(null);
      pari3.toinen(null);
      System.out.println(pari3.ensimmäinen());        // null
      System.out.println(pari3.toinen());             // null
   }
}