export let generateFloatRange = (min: number, max: number): number =>
  Math.random() * (max - min) + min;
export let generateIntRange = (min: number, max: number): number =>
  Math.floor(generateFloatRange(min, max));

export let generateIntMin = (min: number): number => generateIntRange(min, 100);

export let generateInt = (): number => generateIntMin(-100);

let generatePositiveInt = (): number => generateIntMin(1);

export let generateNormal = (): string =>
  `normal(${generateInt()}, ${generatePositiveInt()})`;

export let generateBeta = (): string =>
  `beta(${generatePositiveInt()}, ${generatePositiveInt()})`;

export let generateLognormal = (): string =>
  `lognormal(${generateInt()}, ${generatePositiveInt()})`;

export let generateExponential = (): string =>
  `exponential(${generatePositiveInt()})`;

export let generateUniform = (): string => {
  let a = generateInt();
  let b = generateIntMin(a + 1);
  return `uniform(${a}, ${b})`;
};
export let generateCauchy = (): string => {
  return `cauchy(${generateInt()}, ${generatePositiveInt()})`;
};

export let generateTriangular = (): string => {
  let a = generateInt();
  let b = generateIntMin(a + 1);
  let c = generateIntMin(b + 1);
  return `triangular(${a}, ${b}, ${c})`;
};

export let distributions: { [key: string]: () => string } = {
  normal: generateNormal,
  beta: generateBeta,
  lognormal: generateLognormal,
  exponential: generateExponential,
  triangular: generateTriangular,
  cauchy: generateCauchy,
  uniform: generateUniform,
};