Packages

p

org

scalacheck

package scalacheck

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. Protected

Package Members

  1. package commands
  2. package rng
  3. package util

Type Members

  1. sealed abstract class Arbitrary[T] extends Serializable
  2. sealed trait Cogen[T] extends Serializable
  3. trait CogenLowPriority extends AnyRef
  4. sealed abstract class Gen[+T] extends Serializable

    A generator produces values for Props

    A generator produces values for Props

    This module provides:

    1. Definitions for non-arbitrary generators,
    2. Factories to construct generators,
    3. Methods to modify a generator, and
    4. Various combinators for producing generators of values for more complex data types.

    Explicit generators aren't required to write Props:

    Prop.forAll { (n: Int) =>
      n == n
    }

    The Prop above is defined with parameters only and without an explicit generator, because generators are implicitly provided by Arbitrary for various data types.

    However, it's not uncommon to need to write explicit custom generators:

    val genInt: Gen[Int] = Gen.choose(1,10)
    Prop.forAll(genInt) { (n: Int) =>
      n == n
    }

    This is a simple definition of a generator for booleans:

    val genBool: Gen[Boolean] = Gen.oneOf(true,false)

    The above definition isn't necessary, though. The same boolean generator is defined in Arbitrary as an implicit declaration for automatically parameterizing Props. Instead, use use a generator that is defined in Arbitrary with the polymorphic method Arbitrary.arbitrary and an explicit type parameter:

    val genBool: Gen[Boolean] = Arbitrary.arbitrary[Boolean]

    Alternatively, this is a boolean generator, but one that always produces true:

    val genBool = Gen.const(true)

    This is a generator of booleans that is true at a 2-to-1 ratio:

    val genBool = Gen.frequency(2 -> true, 1 -> false)

    This is a boolean generator that will produce true 75% of the time:

    val genBool = Gen.prob(0.75)

    For more information on designing custom generators and the motivations for doing so, see chapter 6, Generators in Detail, of the book ScalaCheck: The Definitive Guide (2013) by Rickard Nilsson published by Artima Press.

    This is an example of a custom generator for integers:

    val genSmallInt: Gen[Int] = Gen.choose(-100,100)

    This can be used to generate different collections of zero or more small integers:

    val genListOfInts: Gen[List[Int]] = Gen.listOf(genSmallInt)
    
    val genSeqOfInts: Gen[Seq[Int]] = Gen.someOf(-100 to 100)
    
    val genVectorOfInts: Gen[Vector[Int]] = Gen.containerOf[Vector,Int](genSmallInt)
    
    val genMap: Gen[Map[Int,Boolean]] = Gen.mapOf(Gen.zip(genSmallInt, genBool))
    
    val genOptionalInt: Gen[Option[Int]] = Gen.option(genSmallInt)

    Or collections of one or more small integers:

    val genListOfInts: Gen[List[Int]] = Gen.nonEmptyListOf(genSmallInt)
    
    val genSeqOfInts: Gen[Seq[Int]] = Gen.atLeastOne(-100 to 100)
    
    val genVectorOfInts: Gen[Vector[Int]] = Gen.nonEmptyContainerOf[Vector,Int](genSmallInt)
    
    val genMap: Gen[Map[Int,Boolean]] = Gen.nonEmptyMap(Gen.zip(genSmallInt, genBool))
    
    val genOptionalInt: Gen[Option[Int]] = Gen.some(genSmallInt)

    The class methods for Gen should be familiar with those in the Scala collections API:

    • map - Apply a function to generated values
    • flatMap - Apply a function that returns a generator
    • filter - Use values that satisfy a predicate

    The Gen class also supports for-comprehensions to compose complex generators:

    val genPerson = for {
      firstName <- Gen.oneOf("Alan", "Ada", "Alonzo")
      lastName <- Gen.oneOf("Lovelace", "Turing", "Church")
      age <- Gen.choose(0,100) if (age >= 18)
    } yield Person(firstName, lastName, age)

    Constructors and factories for generators:

    • const - Always generates a single value
    • oneOf - Generate a value from a list of values
    • atLeastOne - Generate a collection with at least one value from a list
    • someOf - Generate a collection with zero or more values from a list
    • choose - Generate numeric values in an (inclusive) range
    • frequency - Choose from multiple values with a weighted distribution

    Combinators of generators:

    Methods for working with Gen internals:

    • resize - Creates a resized version of a generator
    • parameterized - Generator with the parameters
    • size - Generate with the value of the default size parameter
    • sized - Build a generator using the default size parameter

    Methods for probabilistic generators:

    • exponential - Generate numbers according to an exponential distribution
    • gaussian - Generates numbers according to a Gaussian distribution
    • geometric - Generates numbers according to a geometric distribution
    • poisson - Generates numbers according to a Poisson distribution
    • prob - Generates a boolean for the probability of true

    Definitions for generating various, non-arbitrary, common values of strings and characters:

    • alphaChar - Generates an alpha character
    • alphaStr - Generates a string of alpha characters
    • numChar - Generates a numerical character
    • numStr - Generates a string of digits
    • alphaNumChar - Generates an alphanumerical character
    • alphaNumStr - Generates a string of alphanumerical characters
    • alphaLowerChar - Generates a lower-case alpha character
    • alphaLowerStr - Generates a string of lower-case alpha characters
    • alphaUpperChar - Generates an upper-case alpha character
    • alphaUpperStr - Generates a string of upper-case alpha characters
    • asciiChar - Generates an ASCII character
    • asciiStr - Generates a string of ASCII characters
    • identifier - Generates an identifier
    • uuid - Generates a UUID
    • hexChar - Generates a character of a hexadecimal digit
    • hexStr - Generates a string of hexadecimal digits

    Definitions for generating arbitrary values of commonly used types in Scala are defined elsewhere, see Arbitrary.

    There are a couple of factory methods that are for advanced uses of generators:

    • delay - Generate a value of an expression by-name
    • lzy - Lazily generate a value of an expression
    • fail - Fail to generate any values of a type
    • recursive - A fixed point generator
    • resultOf - Generate values with a function or class
    • zip - Generate tuples
  5. sealed abstract class Prop extends Serializable
    Annotations
    @EnableReflectiveInstantiation()
  6. sealed class PropFromFun extends Prop

    Helper class to satisfy ScalaJS compilation.

    Helper class to satisfy ScalaJS compilation. Do not use this directly, use Prop.apply instead.

  7. class Properties extends AnyRef

    Represents a collection of properties, with convenient methods for checking all properties at once.

    Represents a collection of properties, with convenient methods for checking all properties at once.

    Properties are added in the following way:

    object MyProps extends Properties("MyProps") {
      property("myProp1") = forAll { (n:Int, m:Int) =>
        n+m == m+n
      }
    }
    Annotations
    @EnableReflectiveInstantiation()
  8. final class ScalaCheckFramework extends Framework
  9. sealed abstract class Shrink[T] extends Serializable
  10. final class ShrinkFractional[T] extends Shrink[T]
  11. final class ShrinkIntegral[T] extends Shrink[T]
  12. trait ShrinkLowPriority extends AnyRef

Value Members

  1. object Arbitrary extends ArbitraryLowPriority with ArbitraryArities with JavaTimeArbitrary with Serializable

    Defines implicit org.scalacheck.Arbitrary instances for common types.

    Defines implicit org.scalacheck.Arbitrary instances for common types.

    ScalaCheck uses implicit org.scalacheck.Arbitrary instances when creating properties out of functions with the Prop.property method, and when the Arbitrary.arbitrary method is used. For example, the following code requires that there exists an implicit Arbitrary[MyClass] instance:

    val myProp = Prop.forAll { myClass: MyClass =>
      ...
    }
    
    val myGen = Arbitrary.arbitrary[MyClass]

    The required implicit definition could look like this:

    implicit val arbMyClass: Arbitrary[MyClass] = Arbitrary(...)

    The factory method Arbitrary(...) takes a generator of type Gen[T] and returns an instance of Arbitrary[T].

    The Arbitrary module defines implicit org.scalacheck.Arbitrary instances for common types, for convenient use in your properties and generators.

  2. object Cogen extends CogenArities with CogenLowPriority with CogenVersionSpecific with JavaTimeCogen with Serializable
  3. object Gen extends GenArities with GenVersionSpecific with Serializable
  4. object Prop extends Serializable
  5. object Shrink extends ShrinkLowPriority with ShrinkVersionSpecific with JavaTimeShrink with Serializable
  6. object Test

Ungrouped