#pragma once
#include <random>


namespace Random {
  extern std::mt19937 GENERATOR;

  template<typename T>
  T uniform(T from, T to) {
    std::uniform_int_distribution<T> rand(from, to);

    return rand(GENERATOR);
  }

  template<typename T>
  T uniform_real(T from, T to) {
    std::uniform_real_distribution<T> rand(from, to);

    return rand(GENERATOR);
  }

  template<typename T>
  T normal(T from, T to) {
    std::normal_distribution<T> rand(from, to);

    return rand(GENERATOR);
  }
}