Skip to content

Give fc.statistics a return value #4342

@ewinslow

Description

@ewinslow

💡 Idea

If fc.statistics returned the distribution of classifications in addition to printing it, I'd have a straightforward way to property test my arbitraries. Would be nice to also have the number of skipped generated values.

Motivation

I've been trying my hand at building custom arbitraries, and noting that bugs can definitely sneak into those. In particular, I'm concerned that the arbitraries might not be well distributed across the input space, and manually printing out statistics is a bit of a pain. So my property tests could be passing but not really finding edge cases (e.g. imagine if my custom X generator just always returns empty X for some reason). Even if I get it right, someone else could introduce a regression and we could silently lose coverage that we thought we had. So I'm looking for ways to property test the arbitraries themselves.

Example

fc.assert(fc.property(_, () => {
  const results = fc.statistics(
    fc.string(), // source arbitrary
    (v) => `${v.length} characters`, // classifier
    { numRuns: 100_000 }, // extra parameters
  );

  return results.classes['1 characters'] > 0;
}));

Thanks for considering!

Metadata

Metadata

Assignees

No one assigned

    Labels

    💡 Idea to investigateNon straightforward features that seems great but need to be assessed and designed carefully.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions