package p3;
import utilidades.Constantes;
public class Test3 {
/*
* ******************************************************************************************************************
* ******************************************************************************************************************
* TEST PROBLEMA 1
* ******************************************************************************************************************
* ******************************************************************************************************************
*/
public static int testP01 (){
int nota = 10;
boolean concordancia = true;
boolean convergencia = true;
double delta = 0.00001;
float [] piLeibniz = {4.0f, 2.6666665f, 3.4666665f, 2.895238f, 3.3396823f, 2.9760460f};
float [] piLeibniz2 = {3.1416059f, 3.1415973f, 3.141597f, 3.1415968f, 3.1415968f};
int [] its = { 100000, 1000000, 10000000, 100000000, 200000000};
System.out.println("-------------------------------------------------------------------------------------------");
System.out.println("PROBLEMA 1:CalcularPiLeibniz, Math.PI = " + Math.PI);
System.out.println();
try{
System.out.print("COMPROBACIÓN DE ARGUMENTOS (2 ptos): ");
System.out.print("Iteraciones < 0 --> return -1?: ");
if (Calculos.piLeibniz(-1) != -1){
System.out.println("No se comprueba. Resta 2 de 10");
nota -= 2;
}
else{
System.out.println("Ok");
}
System.out.println();
System.out.println("PRUEBA CONCORDANCIA EXPRESIÓN PROGRAMADA CON FÓRMULA DE LEIBNIZ (4 puntos): ");
float deltas [] = new float[piLeibniz.length];
for (int i = 0; i < piLeibniz.length; i++){
deltas[i] = Calculos.piLeibniz(i) - piLeibniz[i];
System.out.print("Its: " + i + " \t\t[calculado, previsto] = [" + Calculos.piLeibniz(i) + ", " + piLeibniz[i] + "], dif = " + deltas[i]);
if (Math.abs(deltas[i]) > delta) {
System.out.println(" Error. ");
concordancia = false;
}
else{
System.out.println(" OK. ");
}
}
for (int i = 0; i < piLeibniz2.length; i++){
deltas[i] = Calculos.piLeibniz(its[i]) - piLeibniz2[i];
System.out.print("Its: " + its[i] + (its[i] <= 10?"\t":"") + " \t[calculado, previsto] = [" + Calculos.piLeibniz(its[i]) + ", " + piLeibniz2[i] + "], dif = " + deltas[i]);
if (Math.abs(deltas[i]) > delta) {
System.out.println(" Error");
concordancia = false;
}
else{
System.out.println(" OK. ");
}
}
System.out.println();
if (!concordancia){
System.out.println("No hay concordancia entre resultados y expresión de pi. Resta 4 de 10");
nota -= 4;
}
else{
System.out.println("Ok");
}
System.out.println();
System.out.print("CONVERGENCIA EXPRESIÓN PROGRAMADA (4 puntos): ");
for (int i = 0; i < deltas.length - 1; i++){
if (Math.abs(deltas[i]) > Math.abs(deltas[i+1])) {
System.out.println(" No convergencia de resultados entre " + i + " e " + (i+1) + "iteraciones");
convergencia = false;
}
}
if (!convergencia){
System.out.println("No hay convergencia a pi en la expresión programada. Resta 4 de 10");
nota -= 4;
}
else{
System.out.println("Ok");
}
}
catch(Exception e){
System.out.println("Se produce error en tiempo de ejecución: ");
e.printStackTrace();
System.out.println();
System.out.println("Si hay errores en tiempo de ejecución que produzcan que el programa aborte\n" +
"la calificación devuelta es CERO: Corrijalos y repita el test. ");
nota = 0;
}
nota = nota > 0?nota:0;
System.out.println();
System.out.println("Nota estimada sobre 10: " + nota);
return nota;
}
/*
* ******************************************************************************************************************
* ******************************************************************************************************************
* TEST PROBLEMA 2
* ******************************************************************************************************************
* ******************************************************************************************************************
*/
public static int testP02 (){
int nota = 10;
long [] factoriales = {1, 1, 2, 6, 24, 120, 720};
boolean concordancia = true;
System.out.println("-------------------------------------------------------------------------------------------");
System.out.println("PROBLEMA 2: factorial.");
System.out.println();
try{
System.out.print("COMPROBACIÓN DE ARGUMENTOS (2 ptos): ");
System.out.print("argumento <= 0 --> return 1?: ");
if (Calculos.factorial(-1) != Constantes.ErrorRangoArgumento){
System.out.println("No se comprueba. Resta 2 de 10");
nota -= 2;
}
else{
System.out.println("Ok");
}
System.out.println();
System.out.println("COMPROBACIÓN DE RESULTADOS (8 ptos): ");
System.out.println("factorial de 0..10");
for (int i = 0; i < factoriales.length; i++){
System.out.println("Factorial: " + i + "[calculado, previsto] = [" + Calculos.factorial(i) + ", " + factoriales[i] + "]");
if (Calculos.factorial(i) != factoriales[i]) {
System.out.println(" No concordancia de resultados en " + i);
concordancia = false;
}
}
if (!concordancia){
nota -= 8;
}
else{
System.out.println();
System.out.println("Ok");
}
System.out.println();
System.out.print("COMPROBACIÓN DE DESBORDAMIENTO en n = 21 (2 ptos): ");
if (Calculos.factorial(21) != Constantes.ErrorDesbordamiento){
System.out.println("No se comprueba desbordamiento (f(21) = " + Calculos.factorial(21) + ". Resta 2 de 10");
nota -= 2;
}
else{
System.out.println("Ok");
}
}
catch(Exception e){
System.out.println("Se produce error en tiempo de ejecución: " + e.getMessage());
e.printStackTrace();
System.out.println();
System.out.println("Si hay errores en tiempo de ejecución que produzcan que el programa aborte\n" +
"la calificación devuelta es CERO: Corrijalos y repita el test. ");
nota = 0;
}
nota = nota > 0?nota:0;
System.out.println();
System.out.println("Nota estimada sobre 10: " + nota);
return nota;
}
/*
* ******************************************************************************************************************
* ******************************************************************************************************************
* TEST PROBLEMA 3
* ******************************************************************************************************************
* ******************************************************************************************************************
*/
public static int testP03 (){
int nota = 10;
long [] potencias21 = {1, 2, 4, 8};
long [] potencias22 = {1, -2, 4, -8};
boolean concordancia = true;
System.out.println("-------------------------------------------------------------------------------------------");
System.out.println("PROBLEMA 3: potencia entera");
System.out.println();
try{
System.out.print("COMPROBACIÓN DE ARGUMENTOS (2 ptos): ");
System.out.print("exponente < 0 --> return -1?: ");
if (Calculos.potenciaEntera(2, -1) != -1){
System.out.println("No se comprueba. Resta 2 de 10");
nota -= 2;
}
else{
System.out.println("Ok");
}
System.out.println();
System.out.println("COMPROBACIÓN DE RESULTADOS (8 ptos): ");
for (int i = 0; i < potencias21.length; i++){
System.out.println("Potencia: " + i + " de 2 [calculado, previsto] = [" + Calculos.potenciaEntera(2, i) + ", " + potencias21[i] + "]");
if (Calculos.potenciaEntera(2, i) != potencias21[i]) {
System.out.println(" No concordancia de resultados en " + i);
concordancia = false;
}
}
for (int i = 0; i < potencias21.length; i++){
System.out.println("Potencia: " + i + " de -2 [calculado, previsto] = [" + Calculos.potenciaEntera(-2, i) + ", " + potencias22[i] + "]");
if (Calculos.potenciaEntera(-2, i) != potencias22[i]) {
System.out.println(" No concordancia de resultados en " + i);
concordancia = false;
}
}
if (!concordancia){
nota -= 8;
}
else{
System.out.println();
System.out.println("Ok");
}
System.out.println();
System.out.print("COMPROBACIÓN DE DESBORDAMIENTO en base = 2, exp = 63 (2 ptos): ");
if (Calculos.potenciaEntera(2, 63) != Constantes.ErrorDesbordamiento){
System.out.println("No se comprueba desbordamiento (f(2, 63) = " + Calculos.potenciaEntera(2, 63) + ". Resta 2 de 10");
nota -= 2;
}
else{
System.out.println("Ok");
}
}
catch(Exception e){
System.out.println("Se produce error en tiempo de ejecución: " + e.getMessage());
e.printStackTrace();
System.out.println();
System.out.println("Si hay errores en tiempo de ejecución que produzcan que el programa aborte\n" +
"la calificación devuelta es CERO: Corrijalos y repita el test. ");
nota = 0;
}
nota = nota > 0?nota:0;
System.out.println();
System.out.println("Nota estimada sobre 10: " + nota);
return nota;
}
/*
* ******************************************************************************************************************
* ******************************************************************************************************************
* TEST PROBLEMA 4
* ******************************************************************************************************************
* ******************************************************************************************************************
*/
public static int testP04 (){
int nota = 10;
boolean concordancia = true;
boolean convergencia = true;
double delta = 0.00001;
float [] piEuler = {2.0f, 2.6666667f, 2.9333334f, 3.047619f, 3.0984128f, 3.1215007f, 3.1321568f, 3.1371295f, 3.1394696f, 3.1405780f};
System.out.println("-------------------------------------------------------------------------------------------");
System.out.println("PROBLEMA 4: calcularPiEuler(int iteraciones), Math.PI = " + Math.PI);
System.out.println();
try{
System.out.print("COMPROBACIÓN DE ARGUMENTOS (2 ptos): ");
System.out.print("Iteraciones < 0 --> return -1?: ");
if (Calculos.piEuler(-1) != -1){
System.out.println("No se comprueba. Resta 2 de 10");
nota -= 2;
}
else{
System.out.println("Ok");
}
System.out.println();
System.out.println("PRUEBA CONCORDANCIA EXPRESIÓN PROGRAMADA CON FÓRMULA DE EULER (4 puntos): ");
float deltas [] = new float[piEuler.length];
for (int i = 0; i < piEuler.length; i++){
deltas[i] = Calculos.piEuler(i) - piEuler[i];
System.out.println("Its: " + i + " \t[calculado, previsto] = [" + Calculos.piEuler(i) + ", " + piEuler[i] + "], dif = " + deltas[i]);
if (Math.abs(deltas[i]) > delta) {
System.out.println(" No concordancia de resultados en " + i + " iteraciones");
concordancia = false;
}
}
if (!concordancia){
System.out.println();
System.out.println("No hay concordancia entre resultados y expresión de pi. Resta 2 de 10");
nota -= 4;
}
else{
System.out.println();
System.out.println("Ok");
System.out.println();
}
System.out.print("PRUEBA DESBORDAMIENTO EXPRESIÓN FÓRMULA DE EULER (2 puntos): ");
if (Calculos.piEuler(9) != Calculos.piEuler(10)){
System.out.println("No se comprueba desbordamiento. calcularPiEuler(11) = " + Calculos.piEuler(11));
nota -= 2;
}
else{
System.out.println("Ok");
System.out.println();
}
System.out.print("CONVERGENCIA EXPRESIÓN PROGRAMADA (4 puntos): ");
for (int i = 0; i < piEuler.length - 1; i++){
if (Math.abs(deltas[i]) > Math.abs(deltas[i+1])) {
System.out.println(" No convergencia de resultados entre " + i + " e " + (i+1) + "iteraciones");
convergencia = false;
}
}
if (!convergencia){
System.out.println("No hay convergencia a pi en la expresión programada. Resta 4 de 10");
nota -= 4;
}
else{
System.out.println("Ok");
}
}
catch(Exception e){
System.out.println("Se produce error en tiempo de ejecución: " + e.getMessage());
e.printStackTrace();
System.out.println();
System.out.println("Si hay errores en tiempo de ejecución que produzcan que el programa aborte\n" +
"la calificación devuelta es CERO: Corrijalos y repita el test. ");
nota = 0;
}
nota = nota > 0?nota:0;
System.out.println();
System.out.println("Nota estimada sobre 10: " + nota);
return nota;
}
}