Class Statistics

java.lang.Object
net.jqwik.api.statistics.Statistics

@API(status=MAINTAINED, since="1.2.3") public class Statistics extends Object
This class serves as a container for static methods to collect statistical data about generated values within a property method and to check coverage of that data.
  • Method Details

    • collect

      public static void collect(@Nullable Object... values)
      Call this method to record an entry for statistical data about generated values. As soon as this method is called at least once in a property method, the statistical data will be reported after the property has finished.

      Usually you call collect(Object[]) method with all arbitraries (parameters passed to test) and than you use coverage(Consumer) method to ensure that certain count of some value has been tried.

      NOTE: you can give descriptive name to some collections using label(String) method. Usually you make multiple label+collect calls, i.e. for each passed arbitrary parameter. This way you can provide parameters with descriptive names/labels.

      Complete documentation is found at the jqwik documentation page for Checking Coverage of Collected Statistics.

      Simple example:

       @Property(generation = GenerationMode.RANDOMIZED)
       void labeledStatistics(@ForAll @IntRange(min = 1, max = 10) Integer anInt) {
              String range = anInt < 3 ? "small" : "large";
              Statistics.label("range").collect(range);
              Statistics.label("value").collect(anInt);
      
              Statistics.label("range).coverage(
                      coverage -> coverage.check("small").percentage(p -> p > 20.0)
               );
              Statistics.label("value").coverage(
                      coverage -> coverage.check(0).count(c -> c > 0)
               );
       }
       
      Parameters:
      values - Can be anything. The list of these values is considered a key for the reported table of frequencies. Constraints:
      • There must be at least one value
      • The number of values must always be the same in a single property
      • Values can be null
      Throws:
      IllegalArgumentException - if one of the constraints on values is violated
      See Also:
    • label

      public static StatisticsCollector label(String label)
      Call this method to get a labeled instance of StatisticsCollector.
      Parameters:
      label - The label will be used for reporting the collected statistical values
      See Also:
    • coverage

      @API(status=MAINTAINED, since="1.4.0") public static void coverage(Consumer<StatisticsCoverage> checker)
      Perform coverage checking for successful property on statistics for values collected with collect(Object...)

      Sample usage:

       Statistics.coverage(coverage -> coverage.check("small").percentage(p -> p > 20.0));
       Statistics.coverage(coverage -> coverage.check(0).count(c -> c > 0));
       
      Parameters:
      checker - Code that consumes a StatisticsCoverage object
      See Also: