• Installing
• Versions
• 9

# Exhaustive and Randomized Testing

A library for exhaustive and randomized testing of Dart properties, based on enumerators. It is inspired by Haskell's smallcheck and quickcheck. If you don't know these libraries, have a look at the small demo below to get an idea of what it can be useful for. I also wrote a post that goes into more details.

## Quick Start

``````import 'dart:collection';
import 'package:propcheck/propcheck.dart';
import 'package:enumerators/combinators.dart' as c;
import 'package:unittest/unittest.dart';

// defines append and reverse
part 'demolib.dart';

/* --- the properties to test --- */

// this should always hold
bool good(List xs, List ys) =>
equals(reverse(append(xs, ys)),
append(reverse(ys), reverse(xs)));

// this should NOT always hold
bool bad(List xs, List ys) =>
equals(reverse(append(xs, ys)),
append(reverse(xs), reverse(ys)));

/* --- how we test them --- */

main() {
// we define an enumeration of lists of integers
final boolsLists = c.listsOf(c.bools);

// 'good' and 'bad' take 2 arguments each so we use forall2
Property goodProperty = forall2(boolsLists, boolsLists, good);

// we test the properties against *every* pair of lists of bools whose
// combined size is <= 10.
group('smallcheck', () {
final sc = new SmallCheck(depth: 10);
test('good', () => sc.check(goodProperty));
});

// we test the properties against random pairs of lists of bools of
// combined size 0, 1, ..., 300.
group('quickcheck', () {
final qc = new QuickCheck(maxSize: 300, seed: 42);
test('good', () => qc.check(goodProperty));
});
}
``````

Output:

``````unittest-suite-wait-for-done
PASS: smallcheck good
Caught falsified after 11 tests
argument 1: [true]
argument 2: [false]

[...]

PASS: quickcheck good
Caught falsified after 5 tests
argument 1: [false]
argument 2: [false, false, true]

[...]

2 PASSED, 2 FAILED, 0 ERRORS
``````

## Try it!

``````git clone https://code.google.com/p/dart-check/
cd dart-check
pub install
dart example/demo.dart
``````

Enjoy the progress indicator, probably the most elaborate part of this library :)

## Use this package as a library

### 1. Depend on it

``````
dependencies:
propcheck: ^0.3.1

``````

### 2. Install it

You can install packages from the command line:

with pub:

``````
\$ pub get

``````

Alternatively, your editor might support `pub get`. Check the docs for your editor to learn more.

### 3. Import it

Now in your Dart code, you can use:

``````
import 'package:propcheck/propcheck.dart';
``````
0.6.0 Mar 2, 2018
0.5.1 Sep 18, 2014
0.5.0 May 31, 2014
0.4.0 Nov 8, 2013
0.3.5 Oct 4, 2013
0.3.4 Oct 3, 2013
0.3.3 Oct 3, 2013
0.3.2 Oct 1, 2013
0.3.1 May 29, 2013
0.3.0 Apr 16, 2013
 Popularity: Describes how popular the package is relative to other packages. [more] 18 Health: Code health derived from static analysis. [more] -- Maintenance: Reflects how tidy and up-to-date the package is. [more] -- Overall: Weighted score of the above. [more] 9

This package version is not analyzed, because it is more than two years old. Check the latest stable version for its analysis.

#### Maintenance issues and suggestions

Running `dartdoc` failed. (-10 points)

Make sure `dartdoc` runs without any issues.

#### Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=0.4.7