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

com.fortysevendeg.scalacheck.datetime.GenDateTime.scala Maven / Gradle / Ivy

package com.fortysevendeg.scalacheck.datetime

import org.scalacheck.Gen
import org.scalacheck.Arbitrary.arbitrary

import com.fortysevendeg.scalacheck.datetime.typeclasses._

/**
  * Some generators for working with dates and times.
  */
object GenDateTime {

  /**
    * Generates a DateTime between the given dateTimex and the end of the period
    * @param dateTime A DateTime to calculate the period offsets from.
    * @param period An offset from dateTime, serving as an upper bound for generated DateTimes. Can be negative, denoting an offset before the provided DateTime.
    * @return A DateTime generator for DateTimes within the expected range.
    */
  def genDateTimeWithinRange[D, R](dateTime: D, range: R)(implicit scDateTime: ScalaCheckDateTimeInfra[D, R], granularity: Granularity[D]): Gen[D] = {
    val diffMillis = scDateTime.getMillis(scDateTime.addRange(dateTime, range)) - scDateTime.getMillis(dateTime)
    Gen.choose(0L min diffMillis, 0L max diffMillis).map(millis => granularity.normalize(scDateTime.addMillis(dateTime, millis)))
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy