@Test
 public void ataqueDe10ElfosNoturnosA10AnosSo3AtacamE29AnoesRecebemAtaques() {
   ExercitoDeElfos exercito = new ExercitoDeElfos();
   ArrayList<Dwarf> dwarves = new ArrayList<Dwarf>();
   for (int i = 0; i < 10; i++) {
     dwarves.add(new Dwarf("" + i));
     exercito.alistarElfo(new ElfoNoturno("" + i));
   }
   exercito.reunirElfosVivoEAtacarDwarves(dwarves);
   for (int i = 0; i < 10; i++) {
     if (i == 9) {
       assertEquals(90.0, dwarves.get(i).getVida(), .0);
       break;
     }
     assertEquals(80.0, dwarves.get(i).getVida(), .0);
   }
   exercito.reunirElfosVivoEAtacarDwarves(dwarves);
   for (int i = 0; i < 10; i++) {
     if (i == 9) {
       assertEquals(70.0, dwarves.get(i).getVida(), .0);
       break;
     }
     assertEquals(60.0, dwarves.get(i).getVida(), .0);
   }
 }
 @Test
 public void ataqueDe5ElfosACincoAnoes() {
   ExercitoDeElfos exercito = new ExercitoDeElfos();
   ArrayList<Dwarf> dwarves = new ArrayList<Dwarf>();
   for (int i = 0; i < 5; i++) {
     dwarves.add(new Dwarf("" + i));
     exercito.alistarElfo(new ElfoVerde("" + i));
   }
   exercito.reunirElfosVivoEAtacarDwarves(dwarves);
   for (int i = 0; i < 5; i++) {
     assertEquals(60.0, dwarves.get(i).getVida(), .0);
   }
 }
 @Test
 public void ataqueDe6ElfosACincoAnoesMasUmElfoEstaMortoENaoAtaca() {
   ExercitoDeElfos exercito = new ExercitoDeElfos();
   ArrayList<Dwarf> dwarves = new ArrayList<Dwarf>();
   for (int i = 0; i < 5; i++) {
     dwarves.add(new Dwarf("" + i));
     exercito.alistarElfo(new ElfoVerde("" + i));
   }
   Elfo elfinhoSpec = new Elfo("Elfinho");
   elfinhoSpec.perderVida(200); // E Morreu...
   exercito.alistarElfo(elfinhoSpec);
   exercito.reunirElfosVivoEAtacarDwarves(dwarves);
   for (int i = 0; i < 5; i++) {
     assertEquals(60.0, dwarves.get(i).getVida(), .0);
   }
 }
 @Test
 public void ataqueDe6ElfosA6AnoesResultaEmUmAtaqueDeCadaIntercalado() {
   ExercitoDeElfos exercito = new ExercitoDeElfos();
   ArrayList<Dwarf> dwarves = new ArrayList<Dwarf>();
   for (int i = 3; i < 6; i++) {
     dwarves.add(new Dwarf("" + i));
     exercito.alistarElfo(new ElfoNoturno("" + i));
   }
   for (int i = 0; i < 3; i++) {
     dwarves.add(new Dwarf("" + i));
     exercito.alistarElfo(new ElfoVerde("" + i));
   }
   exercito.alterarEstrategiaDeAtaque(new EstrategiaIntercalada());
   exercito.reunirElfosVivoEAtacarDwarves(dwarves);
   for (int i = 0; i < 36; i++) {
     assertEquals(
         true,
         i % 2 == 0
             ? exercito.getOrdemDoUltimoAtaque().get(i) instanceof ElfoVerde
             : exercito.getOrdemDoUltimoAtaque().get(i) instanceof ElfoNoturno);
   }
 }
 @Test
 public void
     ataqueDe4ElfosA4AnoesResultaEm8PrimeirosAtaquesDeElfosVerdesE8UltimosEmAtaquesDeElfosNoturnos() {
   ExercitoDeElfos exercito = new ExercitoDeElfos();
   ArrayList<Dwarf> dwarves = new ArrayList<Dwarf>();
   for (int i = 2; i < 4; i++) {
     dwarves.add(new Dwarf("" + i));
     exercito.alistarElfo(new ElfoNoturno("" + i));
   }
   for (int i = 0; i < 2; i++) {
     dwarves.add(new Dwarf("" + i));
     exercito.alistarElfo(new ElfoVerde("" + i));
   }
   exercito.alterarEstrategiaDeAtaque(new EstrategiaGreenFirst());
   exercito.reunirElfosVivoEAtacarDwarves(dwarves);
   for (int i = 0; i < 16; i++) {
     assertEquals(
         true,
         i < 8
             ? exercito.getOrdemDoUltimoAtaque().get(i) instanceof ElfoVerde
             : exercito.getOrdemDoUltimoAtaque().get(i) instanceof ElfoNoturno);
   }
 }