package tests;

import PIANOS.datastructures.*;
import PIANOS.exceptions.*;

import java.util.*;

public class DistributionTest 
{
	public static void main(String[] args) 
	{
		/*
        Testing that getGenCode & getFreqCode produce valid Fortran code.
        (Classes DiscreteUniformDistribution, BinomialDistribution, 
        PoissonDistribution, ContinuousUniformDistribution, BetaDistribution)
        */

        String[] param2 = new String[2];
        param2[0]="PARAM1";
        param2[1]="PARAM2";

        String[] param3 = new String[3];
        param3[0]="PARAM1";
        param3[1]="PARAM2";
        param3[2]="PARAM3";

        String[] param4 = new String[4];
        param4[0]="PARAM1";
        param4[1]="PARAM2";
        param4[2]="PARAM3";
        param4[3]="PARAM4";

        DiscreteUniformDistribution discrete = new DiscreteUniformDistribution();
        BinomialDistribution binomial = new BinomialDistribution();
        PoissonDistribution poisson = new PoissonDistribution();              
        
        ContinuousUniformDistribution continuous = new ContinuousUniformDistribution();
        BetaDistribution beta = new BetaDistribution();


        try
        {
            System.out.println("Discrete uniform distribution:");
            System.out.println("1) Generation");
            ArrayList<String> result=discrete.getGenCode(param3);
            printResult(result);
            System.out.println("2) Frequency");
            result=discrete.getFreqCode(param4);
            printResult(result);
            System.out.println();
            
            System.out.println("Binomial distribution");
            System.out.println("1) Generation");
            result=binomial.getGenCode(param3);
            printResult(result);
            System.out.println("2) Frequency");
            result=binomial.getFreqCode(param4);
            printResult(result);
            System.out.println();

            System.out.println("Poisson distribution");
            System.out.println("1) Generation");
            result=poisson.getGenCode(param2);
            printResult(result);
            System.out.println("2) Frequency");
            result=poisson.getFreqCode(param3);
            printResult(result);
            System.out.println();

            System.out.println("Continuous uniform distribution:");
            System.out.println("1) Generation");
            result=continuous.getGenCode(param3);
            printResult(result);
            System.out.println("2) Frequency");
            result=continuous.getFreqCode(param4);
            printResult(result);
            System.out.println();

            System.out.println("Beta distribution");
            System.out.println("1) Generation");
            result=beta.getGenCode(param3);
            printResult(result);
            System.out.println("2) Frequency");
            result=beta.getFreqCode(param4);
            printResult(result);
            System.out.println();

        }
        catch (IllegalParametersException e)
        {
            System.out.println("Exception.");
        }
	}

    public static void printResult(ArrayList<String> result)
    {
        for (int i=0; i<result.size(); i++)
        {
            System.out.println(result.get(i));
        }
    }
}
