Skip to content

WIP Release Note 4.9.0#7137

Open
dubzzz wants to merge 1 commit into
mainfrom
release-note-490
Open

WIP Release Note 4.9.0#7137
dubzzz wants to merge 1 commit into
mainfrom
release-note-490

Conversation

@dubzzz

@dubzzz dubzzz commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Description

Fixes #issue-number

Checklist

Don't delete this checklist and make sure you do the following before opening the PR

  • I have a full understanding of every line in this PR — whether the code was hand-written, AI-generated, copied from external sources or produced by any other tool
  • I flagged the impact of my change (minor / patch / major) either by running pnpm run bump or by following the instructions from the changeset bot
  • I kept this PR focused on a single concern and did not bundle unrelated changes
  • I followed the gitmoji specification for the name of the PR, including the package scope (e.g. 🐛(vitest) Something...) when the change targets a package other than fast-check
  • I added relevant tests and they would have failed without my PR (when applicable)

@changeset-bot

changeset-bot Bot commented Jul 13, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 60817e5

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@pkg-pr-new

pkg-pr-new Bot commented Jul 13, 2026

Copy link
Copy Markdown
@fast-check/ava

npm i https://pkg.pr.new/@fast-check/ava@7137

fast-check

npm i https://pkg.pr.new/fast-check@7137

@fast-check/jest

npm i https://pkg.pr.new/@fast-check/jest@7137

@fast-check/packaged

npm i https://pkg.pr.new/@fast-check/packaged@7137

@fast-check/poisoning

npm i https://pkg.pr.new/@fast-check/poisoning@7137

@fast-check/vitest

npm i https://pkg.pr.new/@fast-check/vitest@7137

@fast-check/worker

npm i https://pkg.pr.new/@fast-check/worker@7137

commit: 60817e5

@github-actions

Copy link
Copy Markdown
Contributor

⏱️ Benchmark Results

Click to expand

 RUN  v4.1.10 /home/runner/work/fast-check/fast-check


 ✓  fast-check  test/bench/arbitraries.bench.ts > generate 26190ms
     name                                                      hz      min      max     mean      p75      p99     p995     p999      rme  samples
   · boolean()                                          10,363.94   0.0849   0.8153   0.0965   0.1010   0.1522   0.1655   0.3333   ±0.58%     5182  [0.75x] ⇓
     boolean()                                          13,793.43   0.0681   0.3722   0.0725   0.0699   0.0958   0.1032   0.2284   ±0.33%     6897  (baseline)
   · integer()                                          11,801.82   0.0790   0.5348   0.0847   0.0849   0.0961   0.1004   0.1246   ±0.21%     5901  [1.01x] ⇑
     integer()                                          11,741.18   0.0772   0.5171   0.0852   0.0846   0.1203   0.1281   0.1453   ±0.28%     5871  (baseline)
   · maxSafeInteger()                                    7,421.88   0.1296   0.4883   0.1347   0.1335   0.1555   0.1671   0.3570   ±0.29%     3711  [1.03x] ⇑
     maxSafeInteger()                                    7,227.87   0.1277   0.5547   0.1384   0.1441   0.2018   0.2131   0.3612   ±0.41%     3615  (baseline)
   · bigInt()                                            1,316.68   0.7227   1.3463   0.7595   0.7593   0.9368   1.0404   1.3463   ±0.43%      659  [1.01x] ⇑
     bigInt()                                            1,305.25   0.7263   1.0954   0.7661   0.7697   0.9627   0.9975   1.0954   ±0.36%      653  (baseline)
   · float()                                             5,637.17   0.1634   0.5350   0.1774   0.1836   0.2350   0.2731   0.4253   ±0.37%     2819  [0.87x] ⇓
     float()                                             6,512.88   0.1422   0.4745   0.1535   0.1501   0.2402   0.2536   0.3848   ±0.44%     3257  (baseline)
   · double()                                            1,703.18   0.4940   8.2926   0.5871   0.5225   4.2800   4.8228   8.2926   ±5.94%      852  [0.86x] ⇓
     double()                                            1,991.01   0.4756   0.8449   0.5023   0.5076   0.6587   0.6832   0.8449   ±0.31%      996  (baseline)
   · date()                                              3,433.02   0.2598   5.1272   0.2913   0.2775   0.3044   0.3423   5.0283   ±4.91%     1717  [0.88x] ⇓
     date()                                              3,906.26   0.2452   0.5245   0.2560   0.2596   0.2973   0.3708   0.4963   ±0.27%     1954  (baseline)
   · string()                                              907.06   0.8291  10.5943   1.1025   0.9002   7.3762   7.6161  10.5943   ±8.88%      454  [0.77x] ⇓
     string()                                            1,175.37   0.7971   1.2110   0.8508   0.8560   1.0541   1.1189   1.2110   ±0.39%      588  (baseline)
   · string({ maxLength: 100, size: 'max' })               171.97   5.0363   8.7352   5.8151   5.4959   8.7352   8.7352   8.7352   ±4.12%       86  [0.90x] ⇓
     string({ maxLength: 100, size: 'max' })               190.30   4.9527   5.6806   5.2549   5.3297   5.6806   5.6806   5.6806   ±0.57%       96  (baseline)
   · string({ unit: 'grapheme' })                          590.88   1.2832  12.2571   1.6924   1.3658  11.4487  11.6341  12.2571  ±11.28%      299  [0.77x] ⇓
     string({ unit: 'grapheme' })                          767.69   1.2269   1.8687   1.3026   1.3132   1.5640   1.6645   1.8687   ±0.42%      384  (baseline)
   · base64String()                                        888.65   0.8527  12.1767   1.1253   0.9088   7.1772   7.6868  12.1767   ±9.34%      445  [0.78x] ⇓
     base64String()                                      1,139.71   0.8328   1.4279   0.8774   0.8808   1.0859   1.1697   1.4279   ±0.41%      570  (baseline)
   · array(integer())                                    1,569.09   0.4663   8.0505   0.6373   0.5046   6.6500   6.7849   8.0505   ±9.26%      785  [0.77x] ⇓
     array(integer())                                    2,045.62   0.4548   0.7693   0.4888   0.4931   0.6333   0.6560   0.7406   ±0.32%     1023  (baseline)
   · array(integer(), { maxLength: 100, size: 'max' })     293.54   2.7182   7.3229   3.4067   3.1790   7.2729   7.3229   7.3229   ±5.60%      147  [0.85x] ⇓
     array(integer(), { maxLength: 100, size: 'max' })     344.46   2.7305   3.1568   2.9031   2.9486   3.1564   3.1568   3.1568   ±0.43%      173  (baseline)
   · uniqueArray(integer())                              1,137.34   0.6747   8.1531   0.8792   0.7280   5.6702   6.7135   8.1531   ±7.61%      569  [0.80x] ⇓
     uniqueArray(integer())                              1,413.39   0.6634   1.0067   0.7075   0.7142   0.8224   0.8375   1.0067   ±0.28%      707  (baseline)
   · set(integer())                                        913.55   0.8532   6.6778   1.0946   0.9174   6.2652   6.6008   6.6778   ±7.59%      462  [0.82x] ⇓
     set(integer())                                      1,107.86   0.8429   1.3128   0.9026   0.9080   1.0956   1.1439   1.3128   ±0.36%      554  (baseline)
   · tuple(integer())                                    5,662.32   0.1671   0.4972   0.1766   0.1752   0.2229   0.3418   0.3904   ±0.38%     2832  [0.99x] ⇓
     tuple(integer())                                    5,718.17   0.1649   0.4458   0.1749   0.1738   0.2827   0.3010   0.3388   ±0.34%     2860  (baseline)
   · record({ a: integer() })                            1,477.36   0.3592  19.6219   0.6769   0.3882  14.4882  14.8422  19.6219  ±20.15%      739  [0.52x] ⇓
     record({ a: integer() })                            2,834.47   0.3390   0.6380   0.3528   0.3564   0.4609   0.4850   0.6157   ±0.28%     1418  (baseline)
   · dictionary(string(), integer())                      77.7692   8.0250  37.7962  12.8586  20.2309  37.7962  37.7962  37.7962  ±18.54%       39  [0.67x] ⇓
     dictionary(string(), integer())                       115.46   7.7913  13.7076   8.6612   8.6665  13.7076  13.7076  13.7076   ±2.75%       58  (baseline)
   · map(string(), integer())                              119.27   5.4491  21.3392   8.3846   5.9048  21.3392  21.3392  21.3392  ±15.98%       60  [0.66x] ⇓
     map(string(), integer())                              182.03   5.1514   5.9107   5.4937   5.5854   5.9107   5.9107   5.9107   ±0.56%       92  (baseline)
   · constant(1)                                        27,224.60   0.0326   4.5000   0.0367   0.0335   0.1119   0.1214   0.3375   ±1.96%    13613  [0.89x] ⇓
     constant(1)                                        30,446.32   0.0315   0.3365   0.0328   0.0324   0.0442   0.0507   0.1467   ±0.30%    15224  (baseline)
   · constantFrom(1, 2)                                 13,295.78   0.0726   0.3179   0.0752   0.0743   0.0888   0.0977   0.2078   ±0.23%     6648  [0.98x] ⇓
     constantFrom(1, 2)                                 13,509.05   0.0714   0.3748   0.0740   0.0732   0.0864   0.0963   0.2236   ±0.26%     6755  (baseline)
   · oneof(integer(), integer())                         5,243.82   0.1815   0.4990   0.1907   0.1907   0.2124   0.2247   0.3337   ±0.24%     2622  [0.97x] ⇓
     oneof(integer(), integer())                         5,416.55   0.1766   0.5863   0.1846   0.1840   0.2081   0.2372   0.4460   ±0.31%     2709  (baseline)
   · oneof({ weight, arbitrary }, ...)                   5,330.32   0.1785   0.4766   0.1876   0.1875   0.2105   0.2195   0.3331   ±0.23%     2666  [0.97x] ⇓
     oneof({ weight, arbitrary }, ...)                   5,495.96   0.1728   0.5296   0.1820   0.1805   0.2808   0.2872   0.3831   ±0.33%     2748  (baseline)
   · option(integer())                                   5,530.24   0.1723   0.4789   0.1808   0.1802   0.2057   0.2167   0.3459   ±0.25%     2766  [0.97x] ⇓
     option(integer())                                   5,696.35   0.1669   0.4981   0.1756   0.1747   0.1986   0.2411   0.3722   ±0.29%     2849  (baseline)
   · subarray([1, 2, 3, 4, 5])                           2,238.78   0.4202   0.7427   0.4467   0.4503   0.5648   0.5828   0.7367   ±0.29%     1120  [0.99x] ⇓
     subarray([1, 2, 3, 4, 5])                           2,270.48   0.4122   0.7436   0.4404   0.4435   0.5761   0.5951   0.7150   ±0.32%     1136  (baseline)
   · letrec(tree)                                          681.63   0.9182  13.2057   1.4671   1.0715  13.0472  13.1043  13.2057  ±15.87%      341  [1.18x] ⇑
     letrec(tree)                                          576.25   1.4717   4.7276   1.7354   1.7061   4.6528   4.6740   4.7276   ±3.25%      289  (baseline)
   · memo(tree)                                            681.04   0.8887  13.1140   1.4683   1.0280  12.5625  12.6432  13.1140  ±15.17%      341  [1.20x] ⇑
     memo(tree)                                            566.88   1.4778   5.1944   1.7640   1.7259   5.0494   5.0565   5.1944   ±3.60%      284  (baseline)
   · anything()                                           62.7086  11.0883  36.6188  15.9468  21.0725  36.6188  36.6188  36.6188  ±14.54%       32  [0.78x] ⇓
     anything()                                           80.7507  10.2797  20.1858  12.3838  12.8377  20.1858  20.1858  20.1858   ±3.86%       41  (baseline)
   · json()                                               62.4083  12.0626  24.4523  16.0235  22.4451  24.4523  24.4523  24.4523  ±11.07%       32  [0.82x] ⇓
     json()                                               75.8894  11.6586  14.7050  13.1771  13.6883  14.7050  14.7050  14.7050   ±1.96%       38  (baseline)
   · entityGraph(employee -> manager? and team)           10.2928  85.7744   118.27  97.1556   100.77   118.27   118.27   118.27   ±8.89%       10  [0.67x] ⇓
     entityGraph(employee -> manager? and team)           15.3237  63.9701  66.6385  65.2584  66.4925  66.6385  66.6385  66.6385   ±1.12%       10  (baseline)
   · emailAddress()                                       72.7900  10.0420  20.7313  13.7382  19.7199  20.7313  20.7313  20.7313  ±11.13%       37  [0.72x] ⇓
     emailAddress()                                        100.45   9.5710  10.4023   9.9555  10.1110  10.4023  10.4023  10.4023   ±0.55%       51  (baseline)
   · webUrl()                                              124.83   5.2732  17.5359   8.0111   5.5412  17.5359  17.5359  17.5359  ±14.76%       64  [0.65x] ⇓
     webUrl()                                              192.25   4.9965   5.6757   5.2015   5.2362   5.6757   5.6757   5.6757   ±0.55%       97  (baseline)
   · ipV4()                                              1,112.61   0.6729  11.6679   0.8988   0.6972  11.0422  11.1680  11.6679  ±12.38%      557  [0.78x] ⇓
     ipV4()                                              1,427.88   0.6679   1.3207   0.7003   0.6945   1.0512   1.2708   1.3207   ±0.69%      714  (baseline)
   · ipV6()                                                183.21   3.8392  16.9901   5.4582   4.0924  16.9901  16.9901  16.9901  ±12.55%       92  [0.69x] ⇓
     ipV6()                                                267.28   3.5677   4.2352   3.7413   3.7549   4.1113   4.2352   4.2352   ±0.49%      134  (baseline)
   · uuid()                                                568.20   1.2770  14.8556   1.7599   1.3039  13.9645  14.0960  14.8556  ±15.37%      285  [0.71x] ⇓
     uuid()                                                803.42   1.2225   1.6079   1.2447   1.2426   1.4446   1.4659   1.6079   ±0.33%      402  (baseline)
   · stringMatching(/^abc$/)                            29,187.18   0.0329   0.4611   0.0343   0.0338   0.0455   0.0483   0.1683   ±0.34%    14594  [0.95x] ⇓
     stringMatching(/^abc$/)                            30,637.80   0.0312   0.3480   0.0326   0.0321   0.0437   0.0463   0.2072   ±0.41%    15319  (baseline)
   · stringMatching(/^[a-zA-Z0-9]+$/)                      509.20   1.4888  11.4481   1.9639   1.5589  11.3737  11.4304  11.4481  ±12.40%      255  [0.77x] ⇓
     stringMatching(/^[a-zA-Z0-9]+$/)                      663.05   1.4327   1.9284   1.5082   1.5155   1.8331   1.8726   1.9284   ±0.44%      332  (baseline)
   · mixedCase(string())                                   505.73   1.6643   8.9938   1.9774   1.7550   5.7216   7.3613   8.9938   ±5.89%      253  [0.87x] ⇓
     mixedCase(string())                                   579.69   1.6319   2.8794   1.7251   1.7195   2.3184   2.8433   2.8794   ±0.79%      290  (baseline)
   · integer().map(value+1)                              7,839.18   0.1195   0.4371   0.1276   0.1279   0.1476   0.1611   0.2943   ±0.25%     3920  [0.96x] ⇓
     integer().map(value+1)                              8,201.41   0.1132   0.4478   0.1219   0.1214   0.1436   0.1510   0.3698   ±0.34%     4101  (baseline)
   · integer().chain(integer())                          3,673.84   0.2601   0.5775   0.2722   0.2751   0.3337   0.4291   0.5719   ±0.32%     1837  [1.02x] ⇑
     integer().chain(integer())                          3,600.46   0.2590   0.6069   0.2777   0.2763   0.4929   0.5087   0.6006   ±0.64%     1801  (baseline)
   · integer().filter(true)                              8,965.61   0.1045   0.5252   0.1115   0.1113   0.1330   0.1408   0.2048   ±0.29%     4483  [0.97x] ⇓
     integer().filter(true)                              9,223.67   0.1008   0.4866   0.1084   0.1083   0.1288   0.1334   0.1799   ±0.29%     4612  (baseline)

 ✓  fast-check  test/bench/runners.bench.ts > runner 2429ms
     name                                                     hz     min     max    mean     p75     p99    p995    p999     rme  samples
   · assert on sync predicate not returning anything   15,864.99  0.0607  0.2806  0.0630  0.0615  0.1042  0.1366  0.1735  ±0.33%     7933  [0.99x] ⇓
     assert on sync predicate not returning anything   16,068.11  0.0600  0.2722  0.0622  0.0607  0.0995  0.1359  0.1701  ±0.34%     8035  (baseline)
   · assert on sync predicate returning true           15,832.42  0.0605  0.2977  0.0632  0.0614  0.1129  0.1364  0.1730  ±0.35%     7917  [0.98x] ⇓
     assert on sync predicate returning true           16,127.25  0.0593  0.2781  0.0620  0.0605  0.0975  0.1351  0.1732  ±0.33%     8064  (baseline)
   · assert on async predicate not returning anything  10,326.98  0.0920  0.2902  0.0968  0.0933  0.1675  0.1755  0.2034  ±0.41%     5164  [1.02x] ⇑
     assert on async predicate not returning anything  10,162.96  0.0929  0.3224  0.0984  0.0945  0.1763  0.1813  0.2327  ±0.45%     5082  (baseline)
   · check on sync predicate not returning anything    16,083.33  0.0597  0.2890  0.0622  0.0603  0.1162  0.1355  0.2009  ±0.38%     8042  [1.03x] ⇑
     check on sync predicate not returning anything    15,630.90  0.0603  1.0948  0.0640  0.0611  0.1217  0.1416  0.2216  ±0.59%     7816  (baseline)

 BENCH  Summary

   fast-check  stringMatching(/^abc$/) - test/bench/arbitraries.bench.ts > generate
    1.07x faster than constant(1)
    2.20x faster than constantFrom(1, 2)
    2.47x faster than integer()
    2.82x faster than boolean()
    3.26x faster than integer().filter(true)
    3.72x faster than integer().map(value+1)
    3.93x faster than maxSafeInteger()
    5.15x faster than tuple(integer())
    5.18x faster than float()
    5.28x faster than option(integer())
    5.48x faster than oneof({ weight, arbitrary }, ...)
    5.57x faster than oneof(integer(), integer())
    7.94x faster than integer().chain(integer())
    8.50x faster than date()
    13.04x faster than subarray([1, 2, 3, 4, 5])
    17.14x faster than double()
    18.60x faster than array(integer())
    19.76x faster than record({ a: integer() })
    22.17x faster than bigInt()
    25.66x faster than uniqueArray(integer())
    26.23x faster than ipV4()
    31.95x faster than set(integer())
    32.18x faster than string()
    32.84x faster than base64String()
    42.82x faster than letrec(tree)
    42.86x faster than memo(tree)
    49.40x faster than string({ unit: 'grapheme' })
    51.37x faster than uuid()
    57.32x faster than stringMatching(/^[a-zA-Z0-9]+$/)
    57.71x faster than mixedCase(string())
    99.43x faster than array(integer(), { maxLength: 100, size: 'max' })
    159.31x faster than ipV6()
    169.73x faster than string({ maxLength: 100, size: 'max' })
    233.82x faster than webUrl()
    244.72x faster than map(string(), integer())
    375.31x faster than dictionary(string(), integer())
    400.98x faster than emailAddress()
    465.44x faster than anything()
    467.68x faster than json()
    2835.70x faster than entityGraph(employee -> manager? and team)

   fast-check  check on sync predicate not returning anything - test/bench/runners.bench.ts > runner
    1.01x faster than assert on sync predicate not returning anything
    1.02x faster than assert on sync predicate returning true
    1.56x faster than assert on async predicate not returning anything

Benchmark report written to /home/runner/work/fast-check/fast-check/benchmark.json

Commit: 60817e5 (merge: a5694be)

@codecov

codecov Bot commented Jul 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.89%. Comparing base (5267837) to head (60817e5).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #7137   +/-   ##
=======================================
  Coverage   94.89%   94.89%           
=======================================
  Files         212      212           
  Lines        5951     5951           
  Branches     1565     1564    -1     
=======================================
  Hits         5647     5647           
  Misses        296      296           
  Partials        8        8           
Flag Coverage Δ
tests 94.89% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant