#include "random-standalone.h"

#include <iostream>
using namespace std;

int main(int, char* [])
{
  Random generator1;
  Random generator2;
  generator1.randomize(1234);
  generator2.randomize(5678);
  int    i1  = generator1.uniform<int>(1, 100);   //int dans [0;100], loi uniforme
  int    i2  = generator2.uniform<int>(1, 100);   //int dans [0;100], loi uniforme
  float  f1  = generator1.uniform<int>(-50, 50);  //float dans ]0;100[, loi uniforme
  float  f2  = generator2.uniform<int>(-50, 50);  //float dans ]0;100[, loi uniforme
  double d11 = generator1.uniform();              //double dans ]0;1[, loi uniforme
  double d12 = generator2.uniform();              //double dans ]0;1[, loi uniforme
  double d21 = generator1.uniform<double>(2, 10); //double dans ]2;10[, loi uniforme
  double d22 = generator2.uniform<double>(2, 10); //double dans ]2;10[, loi uniforme
  double g1  = generator1.gaussian(1.23, 4.56);   //double de N(1.23, 4.56)
  double g2  = generator2.gaussian(1.23, 4.56);   //double de N(1.23, 4.56)
  double e1  = generator1.exponential(1.2345);    //double de Exp(1.2345)
  double e2  = generator2.exponential(1.2345);    //double de Exp(1.2345)

  cout << "Resultat attendu du generateur 1: i1  = 24"        << endl;
  cout << "Resultat observe du generateur 1: i1  = "          << i1 << endl;
  cout << "Resultat attendu du generateur 2: i2  = 54"        << endl;
  cout << "Resultat observe du generateur 2: i2  = "          << i2 << endl;
  cout << "Resultat attendu du generateur 1: f1  = 28"        << endl;
  cout << "Resultat observe du generateur 1: f1  = "          << f1 << endl;
  cout << "Resultat attendu du generateur 2: f2  = 40"        << endl;
  cout << "Resultat observe du generateur 2: f2  = "          << f2 << endl;
  cout << "Resultat attendu du generateur 1: d11 = 0.379989"  << endl;
  cout << "Resultat observe du generateur 1: d11 = "          << d11 << endl;
  cout << "Resultat attendu du generateur 2: d12 = 0.841221"  << endl;
  cout << "Resultat observe du generateur 2: d12 = "          << d12 << endl;
  cout << "Resultat attendu du generateur 1: d21 = 8.82691"   << endl;
  cout << "Resultat observe du generateur 1: d21 = "          << d21 << endl;
  cout << "Resultat attendu du generateur 2: d22 = 8.35922"   << endl;
  cout << "Resultat observe du generateur 2: d22 = "          << d22 << endl;
  cout << "Resultat attendu du generateur 1: g1  = -2.98775"  << endl;
  cout << "Resultat observe du generateur 1: g1  = "          << g1 << endl;
  cout << "Resultat attendu du generateur 2: g2  = -8.83189"  << endl;
  cout << "Resultat observe du generateur 2: g2  = "          << g2 << endl;
  cout << "Resultat attendu du generateur 1: e1  = 0.115537"  << endl;
  cout << "Resultat observe du generateur 1: e1  = "          << e1 << endl;
  cout << "Resultat attendu du generateur 2: e2  = 0.0116986" << endl;
  cout << "Resultat observe du generateur 2: e2  = "          << e2 << endl;

  return 0;
}
