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

org.specs2.scalacheck.ScalaCheckPropertyCreation.scala Maven / Gradle / Ivy

There is a newer version: 5.5.8
Show newest version
package org.specs2
package scalacheck

import org.scalacheck.*
import org.scalacheck.util.{FreqMap, Pretty}
import execute.AsResult
import ScalaCheckProperty.*

trait ScalaCheckPropertyCreation:

  /** create a ScalaCheck property from a function */
  def prop[T, R](result: T => R)(implicit
      arbitrary: Arbitrary[T],
      shrink: Shrink[T],
      pretty: T => Pretty,
      prettyFreqMap: FreqMap[Set[Any]] => Pretty,
      asResult: AsResult[R],
      parameters: Parameters
  ): ScalaCheckFunction1[T, R] =
    ScalaCheckFunction1(
      result,
      arbitrary,
      Some(shrink),
      collectors = Nil,
      pretty,
      prettyFreqMap,
      asResult,
      parameters
    )

  /** create a ScalaCheck property from a function of 2 arguments */
  def prop[T1, T2, R](result: (T1, T2) => R)(using
      arbitrary1: Arbitrary[T1],
      shrink1: Shrink[T1],
      pretty1: T1 => Pretty,
      arbitrary2: Arbitrary[T2],
      shrink2: Shrink[T2],
      pretty2: T2 => Pretty,
      prettyFreqMap: FreqMap[Set[Any]] => Pretty,
      asResult: AsResult[R],
      parameters: Parameters
  ): ScalaCheckFunction2[T1, T2, R] =
    ScalaCheckFunction2(
      result,
      ScalaCheckArgInstances(arbitrary1, Some(shrink1), collectors = Nil, pretty = pretty1),
      ScalaCheckArgInstances(arbitrary2, Some(shrink2), collectors = Nil, pretty = pretty2),
      prettyFreqMap = prettyFreqMap,
      asResult,
      parameters
    )

  /** create a ScalaCheck property from a function of 3 arguments */
  def prop[T1, T2, T3, R](result: (T1, T2, T3) => R)(using
      arbitrary1: Arbitrary[T1],
      shrink1: Shrink[T1],
      pretty1: T1 => Pretty,
      arbitrary2: Arbitrary[T2],
      shrink2: Shrink[T2],
      pretty2: T2 => Pretty,
      arbitrary3: Arbitrary[T3],
      shrink3: Shrink[T3],
      pretty3: T3 => Pretty,
      prettyFreqMap: FreqMap[Set[Any]] => Pretty,
      asResult: AsResult[R],
      parameters: Parameters
  ): ScalaCheckFunction3[T1, T2, T3, R] =
    ScalaCheckFunction3(
      result,
      ScalaCheckArgInstances(arbitrary1, Some(shrink1), collectors = Nil, pretty = pretty1),
      ScalaCheckArgInstances(arbitrary2, Some(shrink2), collectors = Nil, pretty = pretty2),
      ScalaCheckArgInstances(arbitrary3, Some(shrink3), collectors = Nil, pretty = pretty3),
      prettyFreqMap = prettyFreqMap,
      asResult,
      parameters
    )

  /** create a ScalaCheck property from a function of 4 arguments */
  def prop[T1, T2, T3, T4, R](result: (T1, T2, T3, T4) => R)(using
      arbitrary1: Arbitrary[T1],
      shrink1: Shrink[T1],
      pretty1: T1 => Pretty,
      arbitrary2: Arbitrary[T2],
      shrink2: Shrink[T2],
      pretty2: T2 => Pretty,
      arbitrary3: Arbitrary[T3],
      shrink3: Shrink[T3],
      pretty3: T3 => Pretty,
      arbitrary4: Arbitrary[T4],
      shrink4: Shrink[T4],
      pretty4: T4 => Pretty,
      prettyFreqMap: FreqMap[Set[Any]] => Pretty,
      asResult: AsResult[R],
      parameters: Parameters
  ): ScalaCheckFunction4[T1, T2, T3, T4, R] =
    ScalaCheckFunction4(
      result,
      ScalaCheckArgInstances(arbitrary1, Some(shrink1), collectors = Nil, pretty = pretty1),
      ScalaCheckArgInstances(arbitrary2, Some(shrink2), collectors = Nil, pretty = pretty2),
      ScalaCheckArgInstances(arbitrary3, Some(shrink3), collectors = Nil, pretty = pretty3),
      ScalaCheckArgInstances(arbitrary4, Some(shrink4), collectors = Nil, pretty = pretty4),
      prettyFreqMap = prettyFreqMap,
      asResult,
      parameters
    )

  /** create a ScalaCheck property from a function of 5 arguments */
  def prop[T1, T2, T3, T4, T5, R](result: (T1, T2, T3, T4, T5) => R)(using
      arbitrary1: Arbitrary[T1],
      shrink1: Shrink[T1],
      pretty1: T1 => Pretty,
      arbitrary2: Arbitrary[T2],
      shrink2: Shrink[T2],
      pretty2: T2 => Pretty,
      arbitrary3: Arbitrary[T3],
      shrink3: Shrink[T3],
      pretty3: T3 => Pretty,
      arbitrary4: Arbitrary[T4],
      shrink4: Shrink[T4],
      pretty4: T4 => Pretty,
      arbitrary5: Arbitrary[T5],
      shrink5: Shrink[T5],
      pretty5: T5 => Pretty,
      prettyFreqMap: FreqMap[Set[Any]] => Pretty,
      asResult: AsResult[R],
      parameters: Parameters
  ): ScalaCheckFunction5[T1, T2, T3, T4, T5, R] =
    ScalaCheckFunction5(
      result,
      ScalaCheckArgInstances(arbitrary1, Some(shrink1), collectors = Nil, pretty = pretty1),
      ScalaCheckArgInstances(arbitrary2, Some(shrink2), collectors = Nil, pretty = pretty2),
      ScalaCheckArgInstances(arbitrary3, Some(shrink3), collectors = Nil, pretty = pretty3),
      ScalaCheckArgInstances(arbitrary4, Some(shrink4), collectors = Nil, pretty = pretty4),
      ScalaCheckArgInstances(arbitrary5, Some(shrink5), collectors = Nil, pretty = pretty5),
      prettyFreqMap = prettyFreqMap,
      asResult,
      parameters
    )

  /** create a ScalaCheck property from a function of 6 arguments */
  def prop[T1, T2, T3, T4, T5, T6, R](result: (T1, T2, T3, T4, T5, T6) => R)(using
      arbitrary1: Arbitrary[T1],
      shrink1: Shrink[T1],
      pretty1: T1 => Pretty,
      arbitrary2: Arbitrary[T2],
      shrink2: Shrink[T2],
      pretty2: T2 => Pretty,
      arbitrary3: Arbitrary[T3],
      shrink3: Shrink[T3],
      pretty3: T3 => Pretty,
      arbitrary4: Arbitrary[T4],
      shrink4: Shrink[T4],
      pretty4: T4 => Pretty,
      arbitrary5: Arbitrary[T5],
      shrink5: Shrink[T5],
      pretty5: T5 => Pretty,
      arbitrary6: Arbitrary[T6],
      shrink6: Shrink[T6],
      pretty6: T6 => Pretty,
      prettyFreqMap: FreqMap[Set[Any]] => Pretty,
      asResult: AsResult[R],
      parameters: Parameters
  ): ScalaCheckFunction6[T1, T2, T3, T4, T5, T6, R] =
    ScalaCheckFunction6(
      result,
      ScalaCheckArgInstances(arbitrary1, Some(shrink1), collectors = Nil, pretty = pretty1),
      ScalaCheckArgInstances(arbitrary2, Some(shrink2), collectors = Nil, pretty = pretty2),
      ScalaCheckArgInstances(arbitrary3, Some(shrink3), collectors = Nil, pretty = pretty3),
      ScalaCheckArgInstances(arbitrary4, Some(shrink4), collectors = Nil, pretty = pretty4),
      ScalaCheckArgInstances(arbitrary5, Some(shrink5), collectors = Nil, pretty = pretty5),
      ScalaCheckArgInstances(arbitrary6, Some(shrink6), collectors = Nil, pretty = pretty6),
      prettyFreqMap = prettyFreqMap,
      asResult,
      parameters
    )

  /** create a ScalaCheck property from a function of 7 arguments */
  def prop[T1, T2, T3, T4, T5, T6, T7, R](result: (T1, T2, T3, T4, T5, T6, T7) => R)(using
      arbitrary1: Arbitrary[T1],
      shrink1: Shrink[T1],
      pretty1: T1 => Pretty,
      arbitrary2: Arbitrary[T2],
      shrink2: Shrink[T2],
      pretty2: T2 => Pretty,
      arbitrary3: Arbitrary[T3],
      shrink3: Shrink[T3],
      pretty3: T3 => Pretty,
      arbitrary4: Arbitrary[T4],
      shrink4: Shrink[T4],
      pretty4: T4 => Pretty,
      arbitrary5: Arbitrary[T5],
      shrink5: Shrink[T5],
      pretty5: T5 => Pretty,
      arbitrary6: Arbitrary[T6],
      shrink6: Shrink[T6],
      pretty6: T6 => Pretty,
      arbitrary7: Arbitrary[T7],
      shrink7: Shrink[T7],
      pretty7: T7 => Pretty,
      prettyFreqMap: FreqMap[Set[Any]] => Pretty,
      asResult: AsResult[R],
      parameters: Parameters
  ): ScalaCheckFunction7[T1, T2, T3, T4, T5, T6, T7, R] =
    ScalaCheckFunction7(
      result,
      ScalaCheckArgInstances(arbitrary1, Some(shrink1), collectors = Nil, pretty = pretty1),
      ScalaCheckArgInstances(arbitrary2, Some(shrink2), collectors = Nil, pretty = pretty2),
      ScalaCheckArgInstances(arbitrary3, Some(shrink3), collectors = Nil, pretty = pretty3),
      ScalaCheckArgInstances(arbitrary4, Some(shrink4), collectors = Nil, pretty = pretty4),
      ScalaCheckArgInstances(arbitrary5, Some(shrink5), collectors = Nil, pretty = pretty5),
      ScalaCheckArgInstances(arbitrary6, Some(shrink6), collectors = Nil, pretty = pretty6),
      ScalaCheckArgInstances(arbitrary7, Some(shrink7), collectors = Nil, pretty = pretty7),
      prettyFreqMap = prettyFreqMap,
      asResult,
      parameters
    )

  /** create a ScalaCheck property from a function of 8 arguments */
  def prop[T1, T2, T3, T4, T5, T6, T7, T8, R](result: (T1, T2, T3, T4, T5, T6, T7, T8) => R)(using
      arbitrary1: Arbitrary[T1],
      shrink1: Shrink[T1],
      pretty1: T1 => Pretty,
      arbitrary2: Arbitrary[T2],
      shrink2: Shrink[T2],
      pretty2: T2 => Pretty,
      arbitrary3: Arbitrary[T3],
      shrink3: Shrink[T3],
      pretty3: T3 => Pretty,
      arbitrary4: Arbitrary[T4],
      shrink4: Shrink[T4],
      pretty4: T4 => Pretty,
      arbitrary5: Arbitrary[T5],
      shrink5: Shrink[T5],
      pretty5: T5 => Pretty,
      arbitrary6: Arbitrary[T6],
      shrink6: Shrink[T6],
      pretty6: T6 => Pretty,
      arbitrary7: Arbitrary[T7],
      shrink7: Shrink[T7],
      pretty7: T7 => Pretty,
      arbitrary8: Arbitrary[T8],
      shrink8: Shrink[T8],
      pretty8: T8 => Pretty,
      prettyFreqMap: FreqMap[Set[Any]] => Pretty,
      asResult: AsResult[R],
      parameters: Parameters
  ): ScalaCheckFunction8[T1, T2, T3, T4, T5, T6, T7, T8, R] =
    ScalaCheckFunction8(
      result,
      ScalaCheckArgInstances(arbitrary1, Some(shrink1), collectors = Nil, pretty = pretty1),
      ScalaCheckArgInstances(arbitrary2, Some(shrink2), collectors = Nil, pretty = pretty2),
      ScalaCheckArgInstances(arbitrary3, Some(shrink3), collectors = Nil, pretty = pretty3),
      ScalaCheckArgInstances(arbitrary4, Some(shrink4), collectors = Nil, pretty = pretty4),
      ScalaCheckArgInstances(arbitrary5, Some(shrink5), collectors = Nil, pretty = pretty5),
      ScalaCheckArgInstances(arbitrary6, Some(shrink6), collectors = Nil, pretty = pretty6),
      ScalaCheckArgInstances(arbitrary7, Some(shrink7), collectors = Nil, pretty = pretty7),
      ScalaCheckArgInstances(arbitrary8, Some(shrink8), collectors = Nil, pretty = pretty8),
      prettyFreqMap = prettyFreqMap,
      asResult,
      parameters
    )

object ScalaCheckPropertyCreation:
  def allPropMethods(n: Int): String =
    (2 to n).map(propMethod).mkString("\n")

  def propMethod(n: Int): String =
    s"""
  /** create a ScalaCheck property from a function of $n arguments */
  def prop[${TNList(n)}, R](result: (${TNList(n)}) => R)(using
    ${(1 to n).map(i => s"arbitrary$i: Arbitrary[T$i], shrink$i: Shrink[T$i], pretty$i: T$i => Pretty").mkString(",")},
    prettyFreqMap: FreqMap[Set[Any]] => Pretty,
    asResult: AsResult[R], parameters: Parameters): ScalaCheckFunction$n[${TNList(n)}, R] =
    ScalaCheckFunction$n(result,
      ${(1 to n)
        .map(i => s"ScalaCheckArgInstances(arbitrary$i, Some(shrink$i), collectors = Nil, pretty = pretty$i)")
        .mkString(",")},
      prettyFreqMap = prettyFreqMap,
      asResult, context = None, parameters)
     """




© 2015 - 2024 Weber Informatics LLC | Privacy Policy