Object

zio.test.environment

TestRandom

Related Doc: package environment

Permalink

object TestRandom extends Serializable

TestRandom allows for deterministically testing effects involving randomness.

TestRandom operates in two modes. In the first mode, TestRandom is a purely functional pseudo-random number generator. It will generate pseudo-random values just like scala.util.Random except that no internal state is mutated. Instead, methods like nextInt describe state transitions from one random state to another that are automatically composed together through methods like flatMap. The random seed can be set using setSeed and TestRandom is guaranteed to return the same sequence of values for any given seed. This is useful for deterministically generating a sequence of pseudo-random values and powers the property based testing functionality in ZIO Test.

In the second mode, TestRandom maintains an internal buffer of values that can be "fed" with methods such as feedInts and then when random values of that type are generated they will first be taken from the buffer. This is useful for verifying that functions produce the expected output for a given sequence of "random" inputs.

import zio.random._
import zio.test.environment.TestRandom

for {
  _ <- TestRandom.feedInts(4, 5, 2)
  x <- random.nextIntBounded(6)
  y <- random.nextIntBounded(6)
  z <- random.nextIntBounded(6)
} yield x + y + z == 11

TestRandom will automatically take values from the buffer if a value of the appropriate type is available and otherwise generate a pseudo-random value, so there is nothing you need to do to switch between the two modes. Just generate random values as you normally would to get pseudo-random values, or feed in values of your own to get those values back. You can also use methods like clearInts to clear the buffer of values of a given type so you can fill the buffer with new values or go back to pseudo-random number generation.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. TestRandom
  2. Serializable
  3. Serializable
  4. AnyRef
  5. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. final case class Buffer(booleans: List[Boolean] = List.empty, bytes: List[Chunk[Byte]] = List.empty, chars: List[Char] = List.empty, doubles: List[Double] = List.empty, floats: List[Float] = List.empty, integers: List[Int] = List.empty, longs: List[Long] = List.empty, strings: List[String] = List.empty) extends Product with Serializable

    Permalink

    The buffer of the TestRandom.

  2. final case class Data(seed1: Int, seed2: Int, nextNextGaussians: scala.collection.immutable.Queue[Double] = Queue.empty) extends Product with Serializable

    Permalink

    The seed of the TestRandom.

  3. trait Service extends Restorable

    Permalink
  4. final case class Test(randomState: Ref[Data], bufferState: Ref[Buffer]) extends random.Random.Service with Service with Product with Serializable

    Permalink

    Adapted from @gzmo work in Scala.js (https://github.com/scala-js/scala-js/pull/780)

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. val DefaultData: Data

    Permalink

    An arbitrary initial seed for the TestRandom.

  5. val any: ZLayer[Random with TestRandom, Nothing, Random with TestRandom]

    Permalink
  6. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  7. val clearBooleans: ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and clears the buffer of booleans.

  8. val clearBytes: ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and clears the buffer of bytes.

  9. val clearChars: ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and clears the buffer of characters.

  10. val clearDoubles: ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and clears the buffer of doubles.

  11. val clearFloats: ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and clears the buffer of floats.

  12. val clearInts: ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and clears the buffer of integers.

  13. val clearLongs: ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and clears the buffer of longs.

  14. val clearStrings: ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and clears the buffer of strings.

  15. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  16. val deterministic: Layer[Nothing, Random with TestRandom]

    Permalink
  17. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  18. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  19. def feedBooleans(booleans: Boolean*): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and feeds the buffer with the specified sequence of booleans.

  20. def feedBytes(bytes: Chunk[Byte]*): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and feeds the buffer with the specified sequence of chunks of bytes.

  21. def feedChars(chars: Char*): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and feeds the buffer with the specified sequence of characters.

  22. def feedDoubles(doubles: Double*): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and feeds the buffer with the specified sequence of doubles.

  23. def feedFloats(floats: Float*): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and feeds the buffer with the specified sequence of floats.

  24. def feedInts(ints: Int*): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and feeds the buffer with the specified sequence of integers.

  25. def feedLongs(longs: Long*): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and feeds the buffer with the specified sequence of longs.

  26. def feedStrings(strings: String*): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and feeds the buffer with the specified sequence of strings.

  27. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  28. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  29. val getSeed: ZIO[TestRandom, Nothing, Long]

    Permalink

    Accesses a TestRandom instance in the environment and gets the seed.

  30. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  31. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  32. def make(data: Data): Layer[Nothing, Random with TestRandom]

    Permalink

    Constructs a new TestRandom with the specified initial state.

    Constructs a new TestRandom with the specified initial state. This can be useful for providing the required environment to an effect that requires a Random, such as with ZIO#provide.

  33. def makeTest(data: Data): UIO[Test]

    Permalink

    Constructs a new Test object that implements the TestRandom interface.

    Constructs a new Test object that implements the TestRandom interface. This can be useful for mixing in with implementations of other interfaces.

  34. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  35. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  36. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  37. val random: ZLayer[Clock, Nothing, Random with TestRandom]

    Permalink
  38. val save: ZIO[TestRandom, Nothing, UIO[Unit]]

    Permalink

    Accesses a TestRandom instance in the environment and saves the random state in an effect which, when run, will restore the TestRandom to the saved state.

  39. def setSeed(seed: ⇒ Long): ZIO[TestRandom, Nothing, Unit]

    Permalink

    Accesses a TestRandom instance in the environment and sets the seed to the specified value.

  40. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  41. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  42. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  43. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  44. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Serializable

Inherited from Serializable

Inherited from AnyRef

Inherited from Any

Ungrouped