All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.fulrich.generators.numerics.NumericGenerator.scala Maven / Gradle / Ivy

package com.github.fulrich.generators.numerics

import com.github.fulrich.generators.api.{GenerationSizes, SizeApi}
import org.scalacheck.Gen
import org.scalacheck.Gen.Choose


abstract class NumericGenerator[T : Numeric : Choose] extends SizeApi[SignGenerator[T]] with GenerationSizes {
  val numeric: Numeric[T] = implicitly[Numeric[T]]

  def apply(range: Int): SignGenerator[T] = SignGenerator[T](numeric.fromInt(range))
  def apply(minimum: Int, maximum: Int): Gen[T] = {
    require(minimum < maximum, s"Your minimum value ($minimum) must be less than your maximum ($maximum).")
    Gen.chooseNum[T](numeric.fromInt(minimum), numeric.fromInt(maximum))
  }

  override lazy val tiny: SignGenerator[T] = SignGenerator[T](numeric.fromInt(TinyMaximum))
  override lazy val short: SignGenerator[T] = SignGenerator[T](numeric.fromInt(ShortMaximum))
  override lazy val default: SignGenerator[T] = SignGenerator[T](numeric.fromInt(DefaultMaximum))
  override lazy val big: SignGenerator[T] = SignGenerator[T](numeric.fromInt(BigMaximum))
  override lazy val huge: SignGenerator[T] = SignGenerator[T](numeric.fromInt(HugeMaximum))
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy