public void testPerdedor3() {
    try {
      simularCarrera(carreras.get(0), new int[] {2, 1, 3});
      simularCarrera(carreras.get(1), new int[] {1, 3, 2});
      simularCarrera(carreras.get(2), new int[] {3, 1, 2});
      simularCarrera(carreras.get(3), new int[] {1, 2, 3});

      assertFalse(apuesta1.isAcertada());
    } catch (TransicionInvalidaEstadoCarreraException e) {
      fail(e.getMessage());
      e.printStackTrace();
    } catch (ResultadosCarreraInvalidosException e) {
      fail(e.getMessage());
      e.printStackTrace();
    } catch (HipodromoException e) {
      e.printStackTrace();
      fail(e.getMessage());
    }
  }
  public void testLiquidar() {

    try {
      simularCarrera(carreras.get(0), new int[] {1, 2, 3});
      simularCarrera(carreras.get(1), new int[] {1, 2, 3});
      simularCarrera(carreras.get(2), new int[] {1, 2, 3});
      simularCarrera(carreras.get(3), new int[] {1, 2, 3});

    } catch (TransicionInvalidaEstadoCarreraException e) {
      fail("Fall� la Simulaci�n de la carrera.");
      e.printStackTrace();
    } catch (ResultadosCarreraInvalidosException e) {
      fail("Fall� la Simulaci�n de la carrera.");
      e.printStackTrace();
    } catch (HipodromoException e) {
      e.printStackTrace();
      fail(e.getMessage());
    }

    try {
      BigDecimal valorACobrar = this.calcularValorACobrar(apuesta1);

      assertEquals(
          "El monto de la liquidaci�n es incorrecto.",
          valorACobrar.setScale(2, RoundingMode.CEILING),
          apuesta1.liquidar().setScale(2));

    } catch (CarreraNoFinalizadaException e) {
      fail("La carrera no hab�a terminado cuando se intent� liquidar la apuesta.");
      e.printStackTrace();
    } catch (ApuestaPerdidaException e) {
      fail("Se intent� liquidar una apuesta perdida.");
      e.printStackTrace();
    } catch (TransicionInvalidaEstadoApuestaException e) {
      fail("Transici�n de estado inv�lida al querer liquidar la apuesta.");
      e.printStackTrace();
    } catch (ApuestaVencidaException e) {
      fail("La apuesta estaba vencida cuando se la quizo liquidar.");
      e.printStackTrace();
    } catch (HipodromoException e) {
      fail("Error al liquidar.");
      e.printStackTrace();
    }

    try {
      BigDecimal valorACobrar = this.calcularValorACobrar(apuesta2);

      assertEquals(
          "El monto de la liquidaci�n es incorrecto.",
          valorACobrar.setScale(2, RoundingMode.CEILING),
          apuesta2.liquidar().setScale(2));

    } catch (CarreraNoFinalizadaException e) {
      fail("La carrera no hab�a terminado cuando se intent� liquidar la apuesta.");
      e.printStackTrace();
    } catch (ApuestaPerdidaException e) {
      assertTrue(true);
      // e.printStackTrace();
    } catch (TransicionInvalidaEstadoApuestaException e) {
      fail("Transici�n de estado inv�lida al querer liquidar la apuesta.");
      e.printStackTrace();
    } catch (ApuestaVencidaException e) {
      fail("La apuesta estaba vencida cuando se la quizo liquidar.");
      e.printStackTrace();
    } catch (HipodromoException e) {
    }
  }