or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

configuration.mdexecution.mdindex.mdproperty-creation.mdtype-integration.md
tile.json

configuration.mddocs/

Configuration

Configure property-based test execution with comprehensive parameter control including test counts, generator sizes, random seeds, verbosity levels, and parallel execution. The configuration system supports both programmatic setup and command-line parameter overrides for flexible test environments.

Capabilities

Parameter Configuration

Configure test execution parameters with builder methods for both quiet and verbose test runs.

trait ScalaCheckParameters {
  implicit def defaultParameters: Parameters
  implicit def defaultFreqMapPretty: FreqMap[Set[Any]] => Pretty
  
  def set(
    minTestsOk: Int = defaultParameters.minTestsOk,
    minSize: Int = defaultParameters.minSize,
    maxDiscardRatio: Float = defaultParameters.maxDiscardRatio,
    maxSize: Int = defaultParameters.maxSize,
    workers: Int = defaultParameters.workers,
    callback: Test.TestCallback = defaultParameters.testCallback,
    loader: Option[ClassLoader] = defaultParameters.loader
  ): Parameters
  
  def display(
    minTestsOk: Int = defaultParameters.minTestsOk,
    minSize: Int = defaultParameters.minSize,
    maxDiscardRatio: Float = defaultParameters.maxDiscardRatio,
    maxSize: Int = defaultParameters.maxSize,
    workers: Int = defaultParameters.workers,
    callback: Test.TestCallback = defaultParameters.testCallback,
    loader: Option[ClassLoader] = defaultParameters.loader
  ): Parameters
}

Usage:

import org.specs2._
import org.specs2.ScalaCheck

class ConfiguredSpec extends Specification with ScalaCheck { def is = s2"""
  High volume testing ${
    prop((xs: List[Int]) => xs.reverse.reverse == xs)
      .set(minTestsOk = 1000, maxSize = 200)
  }
  
  Verbose testing ${
    prop((s: String) => s.length >= 0)
      .display(minTestsOk = 50)
  }
"""
}

Parameters Case Class

Encapsulate all ScalaCheck and specs2-specific test parameters with conversion and override capabilities.

case class Parameters(
  minTestsOk: Int = Test.Parameters.default.minSuccessfulTests,
  minSize: Int = Test.Parameters.default.minSize,
  maxDiscardRatio: Float = Test.Parameters.default.maxDiscardRatio,
  maxSize: Int = Test.Parameters.default.maxSize,
  workers: Int = Test.Parameters.default.workers,
  testCallback: Test.TestCallback = Test.Parameters.default.testCallback,
  loader: Option[ClassLoader] = Test.Parameters.default.customClassLoader,
  prettyParams: Pretty.Params = Pretty.defaultParams,
  seed: Option[Seed] = None
) {
  def verbose: Parameters
  def setVerbosity(v: Int): Parameters
  def testParameters: Test.Parameters
  def overrideWith(commandLine: CommandLine): Parameters
}

Usage:

// Custom parameters instance
implicit val customParams = Parameters(
  minTestsOk = 500,
  maxSize = 100,
  workers = 4,
  seed = Some(Seed.fromBase64("custom-seed").get)
).verbose

class ParameterizedSpec extends Specification with ScalaCheck { def is = s2"""
  Parameterized property ${prop((n: Int) => n * n >= 0)}
"""
}

Seed Management

Control random seed generation for reproducible test runs and debugging failed properties.

object Parameters {
  def makeSeed(seed: String): Option[Seed]
}

// In ScalaCheckProperty
trait ScalaCheckProperty {
  def setSeed(seed: Seed): SelfType
  def setSeed(seed: String): SelfType
}

Usage:

class ReproducibleSpec extends Specification with ScalaCheck { def is = s2"""
  Reproducible property ${
    prop((data: List[String]) => processData(data).size <= data.size)
      .setSeed("AbCdEf1234567890")  // Base64 encoded seed
  }
  
  Debug failing property ${
    prop((x: Double) => x + 0.0 == x)
      .setSeed(Seed.fromBase64("failing-test-seed").get)
      .verbose
  }
"""
}

Verbosity Control

Control test output verbosity for debugging and monitoring test execution.

trait ScalaCheckProperty {
  def setVerbosity(v: Int): SelfType
  def verbose: SelfType
}

case class Parameters(...) {
  def verbose: Parameters
  def setVerbosity(v: Int): Parameters
}

Usage:

class VerboseSpec extends Specification with ScalaCheck { def is = s2"""
  Debug property ${
    prop((input: ComplexData) => validateComplexData(input))
      .verbose
      .set(minTestsOk = 10)  // Fewer tests but verbose output
  }
  
  Custom verbosity ${
    prop((xs: List[Int]) => xs.sorted.head <= xs.sorted.last) 
      .setVerbosity(2)  // Higher verbosity level
  }
"""
}

Command Line Integration

Override parameters from command line arguments for flexible test execution in different environments.

case class Parameters(...) {
  def overrideWith(commandLine: CommandLine): Parameters
}

Command line options:

  • scalacheck.mintestsok=N - Minimum successful tests
  • scalacheck.minsize=N - Minimum generator size
  • scalacheck.maxdiscardratio=F - Maximum discard ratio
  • scalacheck.maxsize=N - Maximum generator size
  • scalacheck.workers=N - Number of worker threads
  • scalacheck.seed=BASE64 - Random seed (Base64 encoded)
  • scalacheck.verbosity=N - Verbosity level
  • scalacheck.verbose=true - Enable verbose mode

Types

// Parameter configuration trait
trait ScalaCheckParameters {
  implicit def defaultParameters: Parameters
  implicit def defaultFreqMapPretty: FreqMap[Set[Any]] => Pretty
  def set(...): Parameters
  def display(...): Parameters
}

// Parameters case class
case class Parameters(
  minTestsOk: Int,
  minSize: Int,
  maxDiscardRatio: Float,
  maxSize: Int,
  workers: Int,
  testCallback: Test.TestCallback,
  loader: Option[ClassLoader],
  prettyParams: Pretty.Params,
  seed: Option[Seed]
) {
  def verbose: Parameters
  def setVerbosity(v: Int): Parameters
  def testParameters: Test.Parameters
  def overrideWith(commandLine: CommandLine): Parameters
}

// Parameters companion
object Parameters {
  def makeSeed(seed: String): Option[Seed]
}