Repository: dubzzz/fast-check
Pull request #2692 (2022-01-31 22:01:18)

⬆️ Bump webpack from 5.67.0 to 5.68.0 in /test/esm/webpack-with-import
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [webpack](https://github.com/webpack/webpack) from 5.67.0 to 5.68.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/webpack/webpack/releases">webpack's releases</a>.</em></p>
<blockquote>
<h2>v5.68.0</h2>
<h1>Features</h1>
<ul>
<li>allow to disable compile time evaluation of import.meta.url</li>
<li>add <code>__webpack_module__</code> and <code>__webpack_module__.id</code> to the api</li>
</ul>
<h1>Bugfixes</h1>
<ul>
<li>fix handling of errors thrown in async modules</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/webpack/webpack/commit/f593d98453e7920bf65f24bf051cd67b5704b59d"><code>f593d98</code></a> 5.68.0</li>
<li><a href="https://github.com/webpack/webpack/commit/6f3735c54850960047cea1ece8194363b2401f29"><code>6f3735c</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/webpack/webpack/issues/15279">#15279</a> from taranek/docs/array-helpers-docs</li>
<li><a href="https://github.com/webpack/webpack/commit/04039ca99c9a5575ecb041796c6a0858d7be591d"><code>04039ca</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/webpack/webpack/issues/15284">#15284</a> from webpack/feature/<strong>webpack_module</strong></li>
<li><a href="https://github.com/webpack/webpack/commit/d7a87ab5bc3c6333dffb49af24990e7672643fcd"><code>d7a87ab</code></a> change <strong>webpack_module_id</strong> to <strong>webpack_module</strong>.id</li>
<li><a href="https://github.com/webpack/webpack/commit/612de998f186a9bb2fe8769a91678df689a0541e"><code>612de99</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/webpack/webpack/issues/15282">#15282</a> from webpack/feature/<strong>webpack_module</strong></li>
<li><a href="https://github.com/webpack/webpack/commit/a962d2ceddc387354a4c4bc927f92e338babfd2c"><code>a962d2c</code></a> add <strong>webpack_module</strong> and <strong>webpack_module_id</strong> to the api</li>
<li><a href="https://github.com/webpack/webpack/commit/5a3760e6d47af6c2a9e70f2e08b7a0d02e6f78a5"><code>5a3760e</code></a> docs(util): added jsdoc annotations for ArrayHelpers.js</li>
<li><a href="https://github.com/webpack/webpack/commit/46e8639a6a1f5288e2f43229f39fc21aecb3c5e8"><code>46e8639</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/webpack/webpack/issues/15246">#15246</a> from pavelsavara/import_meta_url</li>
<li><a href="https://github.com/webpack/webpack/commit/1e73ca79c4e01ab55e6e25f7991306050907ec66"><code>1e73ca7</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/webpack/webpack/issues/15266">#15266</a> from webpack/bugfix/throwing-in-async-modules</li>
<li><a href="https://github.com/webpack/webpack/commit/232403c5e8fcfd733e4fff7f829aac6e51b5fb2a"><code>232403c</code></a> fix discussions</li>
<li>Additional commits viewable in <a href="https://github.com/webpack/webpack/compare/v5.67.0...v5.68.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=webpack&package-manager=npm_and_yarn&previous-version=5.67.0&new-version=5.68.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

codesandbox[bot]: This pull request is automatically built and testable in [CodeSandbox](https://codesandbox.io).

  To see build info of the built libraries, click [here](https://ci.codesandbox.io/status/dubzzz/fast-check/pr/2692/builds/213764) or the icon next to each commit SHA.

Latest deployment of this branch, based on commit a21f9954cfd39aedae82ac51f0923abafcb345da:

|Sandbox| Source |
|--|--|
|[Vanilla](https://codesandbox.io/s/vanilla-pfb9n)| Configuration |
|[fast-check-examples](https://codesandbox.io/s/fast-check-examples-60mg2)| Configuration |

codecov[bot]: # [Codecov](https://codecov.io/gh/dubzzz/fast-check/pull/2692?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN) Report
> Merging [#2692](https://codecov.io/gh/dubzzz/fast-check/pull/2692?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN) (a21f995) into [main](https://codecov.io/gh/dubzzz/fast-check/commit/7cfa765d1b54edeeeda7c7a7db293ae9ce52ce0f?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN) (7cfa765) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/dubzzz/fast-check/pull/2692/graphs/tree.svg?width=650&height=150&src=pr&token=fRi2fJN730&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN)](https://codecov.io/gh/dubzzz/fast-check/pull/2692?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN)

```diff
@@           Coverage Diff           @@
##             main    #2692   +/-   ##
=======================================
  Coverage   95.00%   95.00%           
=======================================
  Files         209      209           
  Lines        4867     4867           
  Branches      961      961           
=======================================
  Hits         4624     4624           
  Misses        239      239           
  Partials        4        4           
```

| Flag | Coverage Δ | |
|---|---|---|
| unit-tests | `95.00% <ø> (ø)` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN#carryforward-flags-in-the-pull-request-comment) to find out more.


------

[Continue to review full report at Codecov](https://codecov.io/gh/dubzzz/fast-check/pull/2692?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/dubzzz/fast-check/pull/2692?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN). Last update [7cfa765...a21f995](https://codecov.io/gh/dubzzz/fast-check/pull/2692?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Nicolas+DUBIEN).


Patch:
diff --git a/documentation/Arbitraries.md b/documentation/Arbitraries.md
index 0ec5f881..76b12245 100644
--- a/documentation/Arbitraries.md
+++ b/documentation/Arbitraries.md
@@ -1105,7 +1105,7 @@ fc.unicodeJson({depthFactor: 0.1})
 *&#8195;Signatures*
 
 - `fc.lorem()`
-- `fc.lorem({maxCount?, mode?})`
+- `fc.lorem({maxCount?, mode?, size?})`
 - _`fc.lorem(maxWordsCount)`_ — _deprecated since v2.6.0 ([#992](https://github.com/dubzzz/fast-check/issues/992))_
 - _`fc.lorem(maxCount, sentenceMode)`_ — _deprecated since v2.6.0 ([#992](https://github.com/dubzzz/fast-check/issues/992))_
 
@@ -1115,6 +1115,7 @@ fc.unicodeJson({depthFactor: 0.1})
 - `mode?` — default: `"words"` — _enable sentence mode by setting its value to `"sentences"`_
 - `maxWordsCount?` — _maximal number of words to produce_
 - `sentenceMode?` — default: `false` — _enable sentence mode_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 _Except if you specified `sentenceMode=true`, `fc.lorem` defaults to words mode_
 
@@ -1624,7 +1625,7 @@ fc.date({ min: new Date("2000-01-01T00:00:00.000Z"), max: new Date("2000-12-31T2
 *&#8195;Signatures*
 
 - `fc.int8Array()`
-- `fc.int8Array({min?, max?, minLength?, maxLength?})`
+- `fc.int8Array({min?, max?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1632,6 +1633,7 @@ fc.date({ min: new Date("2000-01-01T00:00:00.000Z"), max: new Date("2000-12-31T2
 - `max?` — default: `127` — _maximal value (included)_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -1666,7 +1668,7 @@ fc.int8Array({min: 0, minLength: 1})
 *&#8195;Signatures*
 
 - `fc.uint8Array()`
-- `fc.uint8Array({min?, max?, minLength?, maxLength?})`
+- `fc.uint8Array({min?, max?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1674,6 +1676,7 @@ fc.int8Array({min: 0, minLength: 1})
 - `max?` — default: `255` — _maximal value (included)_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -1708,7 +1711,7 @@ fc.uint8Array({max: 42, minLength: 1})
 *&#8195;Signatures*
 
 - `fc.uint8ClampedArray()`
-- `fc.uint8ClampedArray({min?, max?, minLength?, maxLength?})`
+- `fc.uint8ClampedArray({min?, max?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1716,6 +1719,7 @@ fc.uint8Array({max: 42, minLength: 1})
 - `max?` — default: `255` — _maximal value (included)_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -1750,7 +1754,7 @@ fc.uint8ClampedArray({max: 42, minLength: 1})
 *&#8195;Signatures*
 
 - `fc.int16Array()`
-- `fc.int16Array({min?, max?, minLength?, maxLength?})`
+- `fc.int16Array({min?, max?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1758,6 +1762,7 @@ fc.uint8ClampedArray({max: 42, minLength: 1})
 - `max?` — default: `32767` — _maximal value (included)_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -1792,7 +1797,7 @@ fc.int16Array({min: 0, minLength: 1})
 *&#8195;Signatures*
 
 - `fc.uint16Array()`
-- `fc.uint16Array({min?, max?, minLength?, maxLength?})`
+- `fc.uint16Array({min?, max?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1800,6 +1805,7 @@ fc.int16Array({min: 0, minLength: 1})
 - `max?` — default: `65535` — _maximal value (included)_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -1834,7 +1840,7 @@ fc.uint16Array({max: 42, minLength: 1})
 *&#8195;Signatures*
 
 - `fc.int32Array()`
-- `fc.int32Array({min?, max?, minLength?, maxLength?})`
+- `fc.int32Array({min?, max?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1842,6 +1848,7 @@ fc.uint16Array({max: 42, minLength: 1})
 - `max?` — default: `0x7fffffff` — _maximal value (included)_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -1876,7 +1883,7 @@ fc.int32Array({min: 0, minLength: 1})
 *&#8195;Signatures*
 
 - `fc.uint32Array()`
-- `fc.uint32Array({min?, max?, minLength?, maxLength?})`
+- `fc.uint32Array({min?, max?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1884,6 +1891,7 @@ fc.int32Array({min: 0, minLength: 1})
 - `max?` — default: `0xffffffff` — _maximal value (included)_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -1918,7 +1926,7 @@ fc.uint32Array({max: 42, minLength: 1})
 *&#8195;Signatures*
 
 - `fc.float32Array()`
-- `fc.float32Array({min?, max?, noDefaultInfinity?, noNaN?, minLength?, maxLength?})`
+- `fc.float32Array({min?, max?, noDefaultInfinity?, noNaN?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1928,6 +1936,7 @@ fc.uint32Array({max: 42, minLength: 1})
 - `noNaN?` — default: `false` — _do not generate `Number.NaN`_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -1962,7 +1971,7 @@ fc.float32Array({minLength: 1})
 *&#8195;Signatures*
 
 - `fc.float64Array()`
-- `fc.float64Array({min?, max?, noDefaultInfinity?, noNaN?, minLength?, maxLength?})`
+- `fc.float64Array({min?, max?, noDefaultInfinity?, noNaN?, minLength?, maxLength?, size?})`
 
 *&#8195;with:*
 
@@ -1972,6 +1981,7 @@ fc.float32Array({minLength: 1})
 - `noNaN?` — default: `false` — _do not generate `Number.NaN`_
 - `minLength?` — default: `0` — _minimal length (included)_
 - `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included)_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 
 *&#8195;Usages*
 
@@ -2625,14 +2635,15 @@ fc.shuffledSubarray([1, 42, 48, 69, 75, 92], {minLength: 2, maxLength: 3})
 *&#8195;Signatures*
 
 - `fc.sparseArray(arb)`
-- `fc.sparseArray(arb, {maxLength?, minNumElements?, maxNumElements?, noTrailingHole?})`
+- `fc.sparseArray(arb, {maxLength?, minNumElements?, maxNumElements?, size?, noTrailingHole?})`
 
 *&#8195;with:*
 
 - `arb` — _arbitrary instance responsible to generate values_
 - `minNumElements?` — default: `0` — _minimal number of elements (included)_
-- `maxNumElements?` — default: `2 * minNumElements + 10` — _maximal number of elements (included)_
-- `maxLength?` — default: `2 * maxNumElements + 10` — _maximal length (included) - length includes elements but also holes for sparse arrays_
+- `maxNumElements?` — default: `0x7fffffff` [more](#size-explained) — _maximal number of elements (included) - when not specified, the algorithm generating random values will consider it equal to `maxGeneratedLengthFromSizeForArbitrary(minNumElements, size)` but the shrinking one will use `0x7fffffff`_
+- `maxLength?` — default: `0x7fffffff` [more](#size-explained) — _maximal length (included) - length includes elements but also holes for sparse arrays - when not specified, the algorithm generating random values will consider it equal to `maxGeneratedLengthFromSizeForArbitrary(maxNumElements used by generate, size)` but the shrinking one will use `0x7fffffff`_
+- `size?` — default: `undefined` [more](#size-explained) — _how large should the generated values be?_
 - `noTrailingHole?` — default: `false` — _when enabled, all generated arrays will either be the empty array or end by a non-hole_
 
 *&#8195;Usages*
@@ -2673,6 +2684,17 @@ fc.sparseArray(fc.nat())
 // • [273021873,,,,,,,,,1700974328,,1016859405,1953708154,,1993296911,,1530566650,,,,,651418517,,187425710,783209689,,,,2043763242]
 // • [,,,,,,,,,,,661680466,,227120261,,,,,,,,,,,1637939285]
 // • …
+
+fc.sparseArray(fc.nat(), {size: '+1'})
+// Note: By specifying a size higher than the currently configured one, we ask for larger arrays in terms of number of
+// elements (see minNumElements and maxNumElements) but also in terms of length (see maxLength).
+// Examples of generated values:
+// • Object.assign(Array(1030),{6:23,173:21,1029:245254457})
+// • Object.assign(Array(1199),{3:6,6:668263032,7:1787798462,32:502062992,102:600391750,166:20,273:1057836355,384:1802990240,623:709780132,655:1078130226,841:2147483632,920:10,1015:862158711,1157:2147483644,1173:5,1198:1643619536})
+// • Object.assign(Array(1191),{64:1831228621,76:1817271240,103:1921971101,126:1151598222,136:509449625,164:2063169310,167:9966971,180:716310497,183:1391462004,267:1244974369,280:907777027,299:914009386,301:1501506463,306:1485504152,330:450412034,349:1091620465,374:488501875,375:293512875,395:83583365,413:547212156,444:2095112818,459:1656090255,500:2091997175,529:639981495,537:99145273,598:1910525476,606:1155542565,608:667117961,617:1776601619,630:1706777334,637:1641310106,665:1981801593,731:1076709770,754:318485053,756:112106916,758:1067570843,767:1777935574,768:992467967,770:453767451,784:583294476,798:1943597138,806:175982967,815:1574347535,817:1381685022,824:721401545,862:95257528,864:375028203,909:881794603,918:338522106,936:1896261182,938:615938023,960:548232086,978:58068928,982:1843395911,1003:1376820042,1008:507090629,1028:1962031277,1047:387323122,1124:1139870126,1133:236136183,1134:367536700,1139:1889874465,1155:1705599240,1157:429945468,1178:1579280378,1190:500187115})
+// • Object.assign(Array(1200),{0:410562142,1:7,2:112946363,3:23,4:17,5:2147483646,6:348775181,7:2,8:957372836,9:2147483643,10:0,35:2147483642,78:1442184813,90:2147483639,117:481546958,130:281316978,139:1354078375,167:28,178:461591681,182:1349441172,186:22,250:1174761236,277:2147483625,296:9,307:16,342:9,346:1080318260,366:1884425340,425:275477999,431:2147483622,444:2,452:1662365833,455:1053746216,461:14,475:0,483:26,501:638926135,530:2147483620,621:1268124692,649:11,663:1891585551,664:1024794525,688:2147483619,697:27,708:1,713:1941436426,715:1805586088,719:1561513881,744:0,752:2147483642,780:2147483631,784:1395048031,806:1,807:16,816:79188245,837:26,846:2147483636,847:1,855:13,873:809885548,887:833559649,927:2147483633,991:29,1041:1968909467,1044:1360402673,1052:3,1054:325367005,1060:1257804707,1084:2024901486,1087:2147483646,1109:1739477681,1113:8,1123:483827998,1133:17,1173:2147483617,1190:897758518,1191:2147483642,1192:11,1193:2,1194:1,1195:16,1196:29,1197:0,1198:8,1199:2128860591})
+// • Object.assign(Array(1171),{104:1638804142,117:602011150,129:313752679,185:1448469803,222:768117918,263:1554819660,277:1288756625,359:2059980427,440:1867105842,454:2061521669,462:1801440074,469:135779881,508:856264357,522:2113002129,530:1762964315,536:2038762560,588:789315360,614:1151676895,652:542336121,667:467837917,669:1190486377,690:1072930284,718:601332128,772:569548857,781:999860594,802:1900067120,823:1944768495,826:1474566472,830:1950423455,839:1964123632,848:1866472223,852:937790976,877:1266959932,889:1249315120,896:578387423,939:521841256,950:486372919,986:1983847533,1009:1183067405,1027:2519446,1059:423431392,1081:50338564,1086:1927133080,1149:1141117415,1160:1555762662,1170:1465608282})
+// • …
 ```
 </details>
 
diff --git a/src/arbitrary/_internals/WithShrinkFromOtherArbitrary.ts b/src/arbitrary/_internals/WithShrinkFromOtherArbitrary.ts
new file mode 100644
index 00000000..06ec6f7a
--- /dev/null
+++ b/src/arbitrary/_internals/WithShrinkFromOtherArbitrary.ts
@@ -0,0 +1,53 @@
+import { NextArbitrary } from '../../check/arbitrary/definition/NextArbitrary';
+import { NextValue } from '../../check/arbitrary/definition/NextValue';
+import { Random } from '../../random/generator/Random';
+import { Stream } from '../../stream/Stream';
+
+/** @internal */
+function isSafeContext(context: unknown): context is { generatorContext: unknown } | { shrinkerContext: unknown } {
+  return context !== undefined;
+}
+
+/** @internal */
+function toGeneratorNextValue<T>(value: NextValue<T>): NextValue<T> {
+  if (value.hasToBeCloned) {
+    return new NextValue(value.value_, { generatorContext: value.context }, () => value.value);
+  }
+  return new NextValue(value.value_, { generatorContext: value.context });
+}
+
+/** @internal */
+function toShrinkerNextValue<T>(value: NextValue<T>): NextValue<T> {
+  if (value.hasToBeCloned) {
+    return new NextValue(value.value_, { shrinkerContext: value.context }, () => value.value);
+  }
+  return new NextValue(value.value_, { shrinkerContext: value.context });
+}
+
+/** @internal */
+export class WithShrinkFromOtherArbitrary<T> extends NextArbitrary<T> {
+  constructor(
+    private readonly generatorArbitrary: NextArbitrary<T>,
+    private readonly shrinkerArbitrary: NextArbitrary<T>
+  ) {
+    super();
+  }
+
+  generate(mrng: Random, biasFactor: number | undefined): NextValue<T> {
+    return toGeneratorNextValue(this.generatorArbitrary.generate(mrng, biasFactor));
+  }
+
+  canShrinkWithoutContext(value: unknown): value is T {
+    return this.shrinkerArbitrary.canShrinkWithoutContext(value);
+  }
+
+  shrink(value: T, context: unknown): Stream<NextValue<T>> {
+    if (!isSafeContext(context)) {
+      return this.shrinkerArbitrary.shrink(value, undefined).map(toShrinkerNextValue);
+    }
+    if ('generatorContext' in context) {
+      return this.generatorArbitrary.shrink(value, context.generatorContext).map(toGeneratorNextValue);
+    }
+    return this.shrinkerArbitrary.shrink(value, context.shrinkerContext).map(toShrinkerNextValue);
+  }
+}
diff --git a/src/arbitrary/_internals/builders/AnyArbitraryBuilder.ts b/src/arbitrary/_internals/builders/AnyArbitraryBuilder.ts
index 8c5bc646..afa3f482 100644
--- a/src/arbitrary/_internals/builders/AnyArbitraryBuilder.ts
+++ b/src/arbitrary/_internals/builders/AnyArbitraryBuilder.ts
@@ -113,7 +113,7 @@ export function anyArbitraryBuilder(constraints: QualifiedObjectConstraints): Ar
       ...(constraints.withBigInt ? [bigInt()] : []),
       ...(constraints.withDate ? [date()] : []),
       ...(constraints.withTypedArray ? [typedArray()] : []),
-      ...(constraints.withSparseArray ? [sparseArray(tie('anything'), { maxNumElements: maxKeys })] : [])
+      ...(constraints.withSparseArray ? [sparseArray(tie('anything'), { maxNumElements: maxKeys, size })] : [])
     ),
     // String keys
     keys: constraints.withObjectString
diff --git a/src/arbitrary/_internals/builders/RestrictedIntegerArbitraryBuilder.ts b/src/arbitrary/_internals/builders/RestrictedIntegerArbitraryBuilder.ts
new file mode 100644
index 00000000..213458a5
--- /dev/null
+++ b/src/arbitrary/_internals/builders/RestrictedIntegerArbitraryBuilder.ts
@@ -0,0 +1,14 @@
+import { Arbitrary } from '../../../check/arbitrary/definition/Arbitrary';
+import { convertFromNext, convertToNext } from '../../../check/arbitrary/definition/Converters';
+import { integer } from '../../integer';
+import { WithShrinkFromOtherArbitrary } from '../WithShrinkFromOtherArbitrary';
+
+/** @internal */
+export function restrictedIntegerArbitraryBuilder(min: number, maxGenerated: number, max: number): Arbitrary<number> {
+  const generatorArbitrary = convertToNext(integer({ min, max: maxGenerated }));
+  if (maxGenerated === max) {
+    return convertFromNext(generatorArbitrary);
+  }
+  const shrinkerArbitrary = convertToNext(integer({ min, max }));
+  return convertFromNext(new WithShrinkFromOtherArbitrary(generatorArbitrary, shrinkerArbitrary));
+}
diff --git a/src/arbitrary/_internals/builders/TypedIntArrayArbitraryBuilder.ts b/src/arbitrary/_internals/builders/TypedIntArrayArbitraryBuilder.ts
index 05edd7c0..668335e4 100644
--- a/src/arbitrary/_internals/builders/TypedIntArrayArbitraryBuilder.ts
+++ b/src/arbitrary/_internals/builders/TypedIntArrayArbitraryBuilder.ts
@@ -1,6 +1,7 @@
 import { Arbitrary } from '../../../check/arbitrary/definition/Arbitrary';
 import { convertFromNext, convertToNext } from '../../../check/arbitrary/definition/Converters';
 import { array } from '../../array';
+import { SizeForArbitrary } from '../helpers/MaxLengthFromMinLength';
 
 /** @internal */
 type TypedIntArrayBuilderConstraints<TValue> = {
@@ -8,6 +9,7 @@ type TypedIntArrayBuilderConstraints<TValue> = {
   maxLength?: number;
   min?: TValue;
   max?: TValue;
+  size?: SizeForArbitrary;
 };
 
 /** @internal */
@@ -68,4 +70,9 @@ export type IntArrayConstraints = {
    * @remarks Since 2.9.0
    */
   max?: number;
+  /**
+   * Define how large the generated values should be (at max)
+   * @remarks Since 2.22.0
+   */
+  size?: SizeForArbitrary;
 };
diff --git a/src/arbitrary/float32Array.ts b/src/arbitrary/float32Array.ts
index f7d3e861..4c0b9240 100644
--- a/src/arbitrary/float32Array.ts
+++ b/src/arbitrary/float32Array.ts
@@ -3,6 +3,7 @@ import { float } from './float';
 import { FloatNextConstraints } from './_next/floatNext';
 import { array } from './array';
 import { convertFromNext, convertToNext } from '../check/arbitrary/definition/Converters';
+import { SizeForArbitrary } from './_internals/helpers/MaxLengthFromMinLength';
 
 /**
  * Constraints to be applied on {@link float32Array}
@@ -20,6 +21,11 @@ export type Float32ArrayConstraints = {
    * @remarks Since 2.9.0
    */
   maxLength?: number;
+  /**
+   * Define how large the generated values should be (at max)
+   * @remarks Since 2.22.0
+   */
+  size?: SizeForArbitrary;
 } & FloatNextConstraints;
 
 /** @internal */
diff --git a/src/arbitrary/float64Array.ts b/src/arbitrary/float64Array.ts
index 44f31864..399ef00d 100644
--- a/src/arbitrary/float64Array.ts
+++ b/src/arbitrary/float64Array.ts
@@ -3,6 +3,7 @@ import { DoubleNextConstraints } from './_next/doubleNext';
 import { double } from './double';
 import { array } from './array';
 import { convertFromNext, convertToNext } from '../check/arbitrary/definition/Converters';
+import { SizeForArbitrary } from './_internals/helpers/MaxLengthFromMinLength';
 
 /**
  * Constraints to be applied on {@link float64Array}
@@ -20,6 +21,11 @@ export type Float64ArrayConstraints = {
    * @remarks Since 2.9.0
    */
   maxLength?: number;
+  /**
+   * Define how large the generated values should be (at max)
+   * @remarks Since 2.22.0
+   */
+  size?: SizeForArbitrary;
 } & DoubleNextConstraints;
 
 /** @internal */
diff --git a/src/arbitrary/ipV6.ts b/src/arbitrary/ipV6.ts
index 35c620b4..04a3cd39 100644
--- a/src/arbitrary/ipV6.ts
+++ b/src/arbitrary/ipV6.ts
@@ -52,59 +52,78 @@ export function ipV6(): Arbitrary<string> {
   //               / [ *4( h16 ":" ) h16 ] "::"              ls32
   //               / [ *5( h16 ":" ) h16 ] "::"              h16
   //               / [ *6( h16 ":" ) h16 ] "::"
-  const h16Arb = hexaString({ minLength: 1, maxLength: 4 });
+
+  // Any size-based arbitrary called within the implementation of ipV6 has
+  // to be called with size:'max' in order to prevent any behaviour change
+  // related to global settings on size. ipV6 is fully independent of size
+  const h16Arb = hexaString({ minLength: 1, maxLength: 4, size: 'max' });
   const ls32Arb = oneof(
     convertFromNext(convertToNext(tuple(h16Arb, h16Arb)).map(h16sTol32Mapper, h16sTol32Unmapper)),
     ipV4()
   );
   return oneof(
     convertFromNext(
-      convertToNext(tuple(array(h16Arb, { minLength: 6, maxLength: 6 }), ls32Arb)).map(
+      convertToNext(tuple(array(h16Arb, { minLength: 6, maxLength: 6, size: 'max' }), ls32Arb)).map(
         fullySpecifiedMapper,
         fullySpecifiedUnmapper
       )
     ),
     convertFromNext(
-      convertToNext(tuple(array(h16Arb, { minLength: 5, maxLength: 5 }), ls32Arb)).map(
+      convertToNext(tuple(array(h16Arb, { minLength: 5, maxLength: 5, size: 'max' }), ls32Arb)).map(
         onlyTrailingMapper,
         onlyTrailingUnmapper
       )
     ),
     convertFromNext(
       convertToNext(
-        tuple(array(h16Arb, { minLength: 0, maxLength: 1 }), array(h16Arb, { minLength: 4, maxLength: 4 }), ls32Arb)
+        tuple(
+          array(h16Arb, { minLength: 0, maxLength: 1, size: 'max' }),
+          array(h16Arb, { minLength: 4, maxLength: 4, size: 'max' }),
+          ls32Arb
+        )
       ).map(multiTrailingMapper, multiTrailingUnmapper)
     ),
     convertFromNext(
       convertToNext(
-        tuple(array(h16Arb, { minLength: 0, maxLength: 2 }), array(h16Arb, { minLength: 3, maxLength: 3 }), ls32Arb)
+        tuple(
+          array(h16Arb, { minLength: 0, maxLength: 2, size: 'max' }),
+          array(h16Arb, { minLength: 3, maxLength: 3, size: 'max' }),
+          ls32Arb
+        )
       ).map(multiTrailingMapper, multiTrailingUnmapper)
     ),
     convertFromNext(
       convertToNext(
-        tuple(array(h16Arb, { minLength: 0, maxLength: 3 }), array(h16Arb, { minLength: 2, maxLength: 2 }), ls32Arb)
+        tuple(
+          array(h16Arb, { minLength: 0, maxLength: 3, size: 'max' }),
+          array(h16Arb, { minLength: 2, maxLength: 2, size: 'max' }),
+          ls32Arb
+        )
       ).map(multiTrailingMapper, multiTrailingUnmapper)
     ),
     convertFromNext(
-      convertToNext(tuple(array(h16Arb, { minLength: 0, maxLength: 4 }), h16Arb, ls32Arb)).map(
+      convertToNext(tuple(array(h16Arb, { minLength: 0, maxLength: 4, size: 'max' }), h16Arb, ls32Arb)).map(
         multiTrailingMapperOne,
         multiTrailingUnmapperOne
       )
     ),
     convertFromNext(
-      convertToNext(tuple(array(h16Arb, { minLength: 0, maxLength: 5 }), ls32Arb)).map(
+      convertToNext(tuple(array(h16Arb, { minLength: 0, maxLength: 5, size: 'max' }), ls32Arb)).map(
         singleTrailingMapper,
         singleTrailingUnmapper
       )
     ),
     convertFromNext(
-      convertToNext(tuple(array(h16Arb, { minLength: 0, maxLength: 6 }), h16Arb)).map(
+      convertToNext(tuple(array(h16Arb, { minLength: 0, maxLength: 6, size: 'max' }), h16Arb)).map(
         singleTrailingMapper,
         singleTrailingUnmapper
       )
     ),
     convertFromNext(
-      convertToNext(tuple(array(h16Arb, { minLength: 0, maxLength: 7 }))).map(noTrailingMapper, noTrailingUnmapper)
+      convertToNext(tuple(array(h16Arb, { minLength: 0, maxLength: 7, size: 'max' }))).map(
+        noTrailingMapper,
+        noTrailingUnmapper
+      )
     )
   );
 }
diff --git a/src/arbitrary/lorem.ts b/src/arbitrary/lorem.ts
index 6eaab084..c641a294 100644
--- a/src/arbitrary/lorem.ts
+++ b/src/arbitrary/lorem.ts
@@ -11,6 +11,7 @@ import {
   wordsToSentenceUnmapperFor,
 } from './_internals/mappers/WordsToLorem';
 import { convertFromNext, convertToNext } from '../check/arbitrary/definition/Converters';
+import { SizeForArbitrary } from './_internals/helpers/MaxLengthFromMinLength';
 
 /**
  * Constraints to be applied on {@link lorem}
@@ -38,6 +39,11 @@ export interface LoremConstraints {
    * @remarks Since 2.5.0
    */
   mode?: 'words' | 'sentences';
+  /**
+   * Define how large the generated values should be (at max)
+   * @remarks Since 2.22.0
+   */
+  size?: SizeForArbitrary;
 }
 
 /**
@@ -268,6 +274,7 @@ function lorem(constraints: LoremConstraints): Arbitrary<string>;
 function lorem(...args: [] | [number] | [number, boolean] | [LoremConstraints]): Arbitrary<string> {
   const maxWordsCount = typeof args[0] === 'object' ? args[0].maxCount : args[0];
   const sentencesMode = typeof args[0] === 'object' ? args[0].mode === 'sentences' : args[1];
+  const size = typeof args[0] === 'object' ? args[0].size : undefined;
   const maxCount = maxWordsCount !== undefined ? maxWordsCount : 5;
   if (maxCount < 1) {
     throw new Error(`lorem has to produce at least one word/sentence`);
@@ -275,19 +282,19 @@ function lorem(...args: [] | [number] | [number, boolean] | [LoremConstraints]):
   const wordArbitrary = loremWord();
   const wordArbitraryNext = convertToNext(wordArbitrary);
   if (sentencesMode) {
-    const sentence = convertToNext(array(wordArbitrary, { minLength: 1 })).map(
+    const sentence = convertToNext(array(wordArbitrary, { minLength: 1, size: 'small' })).map(
       wordsToSentenceMapper,
       wordsToSentenceUnmapperFor(wordArbitraryNext)
     );
     return convertFromNext(
-      convertToNext(array(convertFromNext(sentence), { minLength: 1, maxLength: maxCount })).map(
+      convertToNext(array(convertFromNext(sentence), { minLength: 1, maxLength: maxCount, size })).map(
         sentencesToParagraphMapper,
         sentencesToParagraphUnmapper
       )
     );
   } else {
     return convertFromNext(
-      convertToNext(array(wordArbitrary, { minLength: 1, maxLength: maxCount })).map(
+      convertToNext(array(wordArbitrary, { minLength: 1, maxLength: maxCount, size })).map(
         wordsToJoinedStringMapper,
         wordsToJoinedStringUnmapperFor(wordArbitraryNext)
       )
diff --git a/src/arbitrary/sparseArray.ts b/src/arbitrary/sparseArray.ts
index 438d0fdf..d704ae76 100644
--- a/src/arbitrary/sparseArray.ts
+++ b/src/arbitrary/sparseArray.ts
@@ -1,10 +1,13 @@
 import { Arbitrary } from '../check/arbitrary/definition/Arbitrary';
 import { convertFromNext, convertToNext } from '../check/arbitrary/definition/Converters';
-import { integer } from './integer';
-import { nat } from './nat';
 import { set } from './set';
 import { tuple } from './tuple';
-import { DefaultSize, maxLengthFromMinLength } from './_internals/helpers/MaxLengthFromMinLength';
+import { restrictedIntegerArbitraryBuilder } from './_internals/builders/RestrictedIntegerArbitraryBuilder';
+import {
+  maxGeneratedLengthFromSizeForArbitrary,
+  MaxLengthUpperBound,
+  SizeForArbitrary,
+} from './_internals/helpers/MaxLengthFromMinLength';
 
 /**
  * Constraints to be applied on {@link sparseArray}
@@ -32,6 +35,11 @@ export interface SparseArrayConstraints {
    * @remarks Since 2.13.0
    */
   noTrailingHole?: boolean;
+  /**
+   * Define how large the generated values should be (at max)
+   * @remarks Since 2.22.0
+   */
+  size?: SizeForArbitrary;
 }
 
 /** @internal */
@@ -62,16 +70,26 @@ function arrayFromItems<T>(length: number, indexesAndValues: [number, T][]) {
  */
 export function sparseArray<T>(arb: Arbitrary<T>, constraints: SparseArrayConstraints = {}): Arbitrary<T[]> {
   const {
+    size,
     minNumElements = 0,
-    // TODO(size) - While from a generate point of view we want some limits using maxLengthFromMinLength
-    // makes us unable to shrink user inputs we could have potentially generated as we restrict our array
-    // to a smaller one (for generate reasons). Ideally maxLength should only be specified when there is
-    // a real need for them. For any other case, we should try not to pass them.
-    maxNumElements = maxLengthFromMinLength(minNumElements, DefaultSize),
-    maxLength = maxLengthFromMinLength(maxNumElements, DefaultSize),
+    maxLength = MaxLengthUpperBound,
+    maxNumElements = maxLength, // cap maxNumElements to maxLength
     noTrailingHole,
   } = constraints;
 
+  const maxGeneratedNumElements = maxGeneratedLengthFromSizeForArbitrary(
+    size,
+    minNumElements,
+    maxNumElements,
+    constraints.maxNumElements !== undefined
+  );
+  const maxGeneratedLength = maxGeneratedLengthFromSizeForArbitrary(
+    size,
+    maxGeneratedNumElements,
+    maxLength,
+    constraints.maxLength !== undefined
+  );
+
   if (minNumElements > maxLength) {
     throw new Error(`The minimal number of non-hole elements cannot be higher than the maximal length of the array`);
   }
@@ -80,11 +98,14 @@ export function sparseArray<T>(arb: Arbitrary<T>, constraints: SparseArrayConstr
   }
 
   const resultedMaxNumElements = Math.min(maxNumElements, maxLength);
+  const resultedSizeMaxNumElements = constraints.maxNumElements !== undefined || size !== undefined ? size : '=';
 
+  const maxGeneratedIndexAuthorized = Math.max(maxGeneratedLength - 1, 0); // just preventing special case for maxGeneratedLength=0
   const maxIndexAuthorized = Math.max(maxLength - 1, 0); // just preventing special case for maxLength=0
   const sparseArrayNoTrailingHole = convertFromNext(
     convertToNext(
-      set(tuple(nat(maxIndexAuthorized), arb), {
+      set(tuple(restrictedIntegerArbitraryBuilder(0, maxGeneratedIndexAuthorized, maxIndexAuthorized), arb), {
+        size: resultedSizeMaxNumElements,
         minLength: minNumElements,
         maxLength: resultedMaxNumElements,
         compare: { selector: (item) => item[0] },
@@ -113,7 +134,9 @@ export function sparseArray<T>(arb: Arbitrary<T>, constraints: SparseArrayConstr
   }
 
   return convertFromNext(
-    convertToNext(tuple(sparseArrayNoTrailingHole, integer({ min: minNumElements, max: maxLength }))).map(
+    convertToNext(
+      tuple(sparseArrayNoTrailingHole, restrictedIntegerArbitraryBuilder(minNumElements, maxGeneratedLength, maxLength))
+    ).map(
       (data) => {
         const sparse = data[0];
         const targetLength = data[1];


Test patch:
diff --git a/test/esm/esbuild-with-import/package.json b/test/esm/esbuild-with-import/package.json
index 9dec1b62..01777d53 100644
--- a/test/esm/esbuild-with-import/package.json
+++ b/test/esm/esbuild-with-import/package.json
@@ -10,7 +10,7 @@
     "fast-check": "*"
   },
   "devDependencies": {
-    "esbuild": "^0.14.13"
+    "esbuild": "^0.14.14"
   },
   "license": "MIT",
   "private": true
diff --git a/test/esm/esbuild-with-import/yarn.lock b/test/esm/esbuild-with-import/yarn.lock
index 3533312e..8ac7a5a6 100644
--- a/test/esm/esbuild-with-import/yarn.lock
+++ b/test/esm/esbuild-with-import/yarn.lock
@@ -2,119 +2,119 @@
 # yarn lockfile v1
 
 
-esbuild-android-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.13.tgz#a5c8cb275dc6dcaf2390abb639791ffc4aa6ead1"
-  integrity sha512-rhtwl+KJ3BzzXkK09N3/YbEF1i5WhriysJEStoeWNBzchx9hlmzyWmDGQQhu56HF78ua3JrVPyLOsdLGvtMvxQ==
-
-esbuild-darwin-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.13.tgz#51ad2fbf8c9d73c1d40e5f9ab6122ffa95f5b494"
-  integrity sha512-Fl47xIt5RMu50WIgMU93kwmUUJb+BPuL8R895n/aBNQqavS+KUMpLPoqKGABBV4myfx/fnAD/97X8Gt1C1YW6w==
-
-esbuild-darwin-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.13.tgz#7ff177193cffbba518a59dfa4666a2fbb3345330"
-  integrity sha512-UttqKRFXsWvuivcyAbFmo54vdkC9Me1ZYQNuoz/uBYDbkb2MgqKYG2+xoVKPBhLvhT0CKM5QGKD81flMH5BE6A==
-
-esbuild-freebsd-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.13.tgz#648357ff0ca399ce65f7e7ebfff701cf105c70f3"
-  integrity sha512-dlIhPFSp29Yq2TPh7Cm3/4M0uKjlfvOylHVNCRvRNiOvDbBol6/NZ3kLisczms+Yra0rxVapBPN1oMbSMuts9g==
-
-esbuild-freebsd-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.13.tgz#7cb0016dd64fd116624c56dcfe58b27fac8ceaee"
-  integrity sha512-bNOHLu7Oq6RwaAMnwPbJ40DVGPl9GlAOnfH/dFZ792f8hFEbopkbtVzo1SU1jjfY3TGLWOgqHNWxPxx1N7Au+g==
-
-esbuild-linux-32@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.13.tgz#50b197f6831e824660ab80d011b656505a0aae32"
-  integrity sha512-WzXyBx6zx16adGi7wPBvH2lRCBzYMcqnBRrJ8ciLIqYyruGvprZocX1nFWfiexjLcFxIElWnMNPX6LG7ULqyXA==
-
-esbuild-linux-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.13.tgz#d2ee4d780e3cadd129ab8988c7c75ca4bd636f3a"
-  integrity sha512-P6OFAfcoUvE7g9h/0UKm3qagvTovwqpCF1wbFLWe/BcCY8BS1bR/+SxUjCeKX2BcpIsg4/43ezHDE/ntg/iOpw==
-
-esbuild-linux-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.13.tgz#9151963c55cd42968c97f2fd354cd6ff9b3cb476"
-  integrity sha512-k/uIvmkm4mc7vyMvJVwILgGxi2F+FuvLdmESIIWoHrnxEfEekC5AWpI/R6GQ2OMfp8snebSQLs8KL05QPnt1zA==
-
-esbuild-linux-arm@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.13.tgz#80e94cd8920607dc0addb97bac7ff5988d0fc28f"
-  integrity sha512-4jmm0UySCg3Wi6FEBS7jpiPb1IyckI5um5kzYRwulHxPzkiokd6cgpcsTakR4/Y84UEicS8LnFAghHhXHZhbFg==
-
-esbuild-linux-mips64le@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.13.tgz#8e7eeef567b0895f2ecc4d66b1f1e5a542f1ce5b"
-  integrity sha512-vwYtgjQ1TRlUGL88km9wH9TjXsdZyZ/Xht1ASptg5XGRlqGquVjLGH11PfLLunoMdkQ0YTXR68b4l5gRfjVbyg==
-
-esbuild-linux-ppc64le@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.13.tgz#ffbe9915a1d8080f9810a9c5938f453003c6de98"
-  integrity sha512-0KqDSIkZaYugtcdpFCd3eQ38Fg6TzhxmOpkhDIKNTwD/W2RoXeiS+Z4y5yQ3oysb/ySDOxWkwNqTdXS4sz2LdQ==
-
-esbuild-linux-s390x@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.13.tgz#e27274d12f198580892432115fc0de432431d33d"
-  integrity sha512-bG20i7d0CN97fwPN9LaLe64E2IrI0fPZWEcoiff9hzzsvo/fQCx0YjMbPC2T3gqQ48QZRltdU9hQilTjHk3geQ==
-
-esbuild-netbsd-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.13.tgz#78199fa57d5794e6ac6c33993dd0588fba22b353"
-  integrity sha512-jz96PQb0ltqyqLggPpcRbWxzLvWHvrZBHZQyjcOzKRDqg1fR/R1y10b1Cuv84xoIbdAf+ceNUJkMN21FfR9G2g==
-
-esbuild-openbsd-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.13.tgz#5394336b602e1db15583bbef7d827a2b9648e373"
-  integrity sha512-bp6zSo3kDCXKPM5MmVUg6DEpt+yXDx37iDGzNTn3Kf9xh6d0cdITxUC4Bx6S3Di79GVYubWs+wNjSRVFIJpryw==
-
-esbuild-sunos-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.13.tgz#4afcddcece51f943149fa07274bd58f64e0913a8"
-  integrity sha512-08Fne1T9QHYxUnu55sV9V4i/yECADOaI1zMGET2YUa8SRkib10i80hc89U7U/G02DxpN/KUJMWEGq2wKTn0QFQ==
-
-esbuild-windows-32@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.13.tgz#cb06267f270bbf7ea6631cc78b8f6e3647975c44"
-  integrity sha512-MW3BMIi9+fzTyDdljH0ftfT/qlD3t+aVzle1O+zZ2MgHRMQD20JwWgyqoJXhe6uDVyunrAUbcjH3qTIEZN3isg==
-
-esbuild-windows-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.13.tgz#3bbfba58e0185121280bd47ccd073b6c1849fd27"
-  integrity sha512-d7+0N+EOgBKdi/nMxlQ8QA5xHBlpcLtSrYnHsA+Xp4yZk28dYfRw1+embsHf5uN5/1iPvrJwPrcpgDH1xyy4JA==
-
-esbuild-windows-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.13.tgz#9203d40d915d809c50bc91af5a8373e5f5abfc4c"
-  integrity sha512-oX5hmgXk9yNKbb5AxThzRQm/E9kiHyDll7JJeyeT1fuGENTifv33f0INCpjBQ+Ty5ChKc84++ZQTEBwLCA12Kw==
-
-esbuild@^0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.13.tgz#ce3fc7c45a6b8a40caad43daa39cdb9c1e84930a"
-  integrity sha512-FIxvAdj3i2oHA6ex+E67bG7zlSTO+slt8kU2ogHDgGtrQLy2HNChv3PYjiFTYkt8hZbEAniZCXVeHn+FrHt7dA==
+esbuild-android-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.14.tgz#3705f32f209deeb11c275af47c298c8783dd5f0c"
+  integrity sha512-be/Uw6DdpQiPfula1J4bdmA+wtZ6T3BRCZsDMFB5X+k0Gp8TIh9UvmAcqvKNnbRAafSaXG3jPCeXxDKqnc8hFQ==
+
+esbuild-darwin-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.14.tgz#c07e4eae6d938300a2d330ea82494c55bcea84e5"
+  integrity sha512-BEexYmjWafcISK8cT6O98E3TfcLuZL8DKuubry6G54n2+bD4GkoRD6HYUOnCkfl2p7jodA+s4369IjSFSWjtHg==
+
+esbuild-darwin-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.14.tgz#a8631e13a51a6f784fb0906e2a64c6ab53988755"
+  integrity sha512-tnBKm41pDOB1GtZ8q/w26gZlLLRzVmP8fdsduYjvM+yFD7E2DLG4KbPAqFMWm4Md9B+DitBglP57FY7AznxbTg==
+
+esbuild-freebsd-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.14.tgz#c280c2b944746b27ee6c6487c2691865c90bed2e"
+  integrity sha512-Q9Rx6sgArOHalQtNwAaIzJ6dnQ8A+I7f/RsQsdkS3JrdzmnlFo8JEVofTmwVQLoIop7OKUqIVOGP4PoQcwfVMA==
+
+esbuild-freebsd-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.14.tgz#aa4e21276efcf20e5ab2487e91ca1d789573189b"
+  integrity sha512-TJvq0OpLM7BkTczlyPIphcvnwrQwQDG1HqxzoYePWn26SMUAlt6wrLnEvxdbXAvNvDLVzG83kA+JimjK7aRNBA==
+
+esbuild-linux-32@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.14.tgz#3db4d929239203ce38a9060d5419ac6a6d28846c"
+  integrity sha512-h/CrK9Baimt5VRbu8gqibWV7e1P9l+mkanQgyOgv0Ng3jHT1NVFC9e6rb1zbDdaJVmuhWX5xVliUA5bDDCcJeg==
+
+esbuild-linux-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.14.tgz#f880026254c1f565a7a10fdebb7cff9b083a127d"
+  integrity sha512-IC+wAiIg/egp5OhQp4W44D9PcBOH1b621iRn1OXmlLzij9a/6BGr9NMIL4CRwz4j2kp3WNZu5sT473tYdynOuQ==
+
+esbuild-linux-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.14.tgz#a34bc3076e50b109c3b8c8bad9c146e35942322b"
+  integrity sha512-6QVul3RI4M5/VxVIRF/I5F+7BaxzR3DfNGoqEVSCZqUbgzHExPn+LXr5ly1C7af2Kw4AHpo+wDqx8A4ziP9avw==
+
+esbuild-linux-arm@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.14.tgz#231ffd12fef69ee06365d4c94b69850e4830e927"
+  integrity sha512-gxpOaHOPwp7zSmcKYsHrtxabScMqaTzfSQioAMUaB047YiMuDBzqVcKBG8OuESrYkGrL9DDljXr/mQNg7pbdaQ==
+
+esbuild-linux-mips64le@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.14.tgz#bd00570e3a30422224b732c7a5f262146c357403"
+  integrity sha512-4Jl5/+xoINKbA4cesH3f4R+q0vltAztZ6Jm8YycS8lNhN1pgZJBDxWfI6HUMIAdkKlIpR1PIkA9aXQgZ8sxFAg==
+
+esbuild-linux-ppc64le@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.14.tgz#430609413fd9e04d9def4e3f06726b031b23d825"
+  integrity sha512-BitW37GxeebKxqYNl4SVuSdnIJAzH830Lr6Mkq3pBHXtzQay0vK+IeOR/Ele1GtNVJ+/f8wYM53tcThkv5SC5w==
+
+esbuild-linux-s390x@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.14.tgz#2f0d8cbfe53cf3cb97f6372549a41a8051dbd689"
+  integrity sha512-vLj6p76HOZG3wfuTr5MyO3qW5iu8YdhUNxuY+tx846rPo7GcKtYSPMusQjeVEfZlJpSYoR+yrNBBxq+qVF9zrw==
+
+esbuild-netbsd-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.14.tgz#3e44de35e1add7e9582f3c0d2558d86aafbc813b"
+  integrity sha512-fn8looXPQhpVqUyCBWUuPjesH+yGIyfbIQrLKG05rr1Kgm3rZD/gaYrd3Wpmf5syVZx70pKZPvdHp8OTA+y7cQ==
+
+esbuild-openbsd-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.14.tgz#04710ef1d01cd9f15d54f50d20b5a3778f8306a2"
+  integrity sha512-HdAnJ399pPff3SKbd8g+P4o5znseni5u5n5rJ6Z7ouqOdgbOwHe2ofZbMow17WMdNtz1IyOZk2Wo9Ve6/lZ4Rg==
+
+esbuild-sunos-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.14.tgz#8e583dd92c5c7ac4303ddc37f588e44211e04e19"
+  integrity sha512-bmDHa99ulsGnYlh/xjBEfxoGuC8CEG5OWvlgD+pF7bKKiVTbtxqVCvOGEZeoDXB+ja6AvHIbPxrEE32J+m5nqQ==
+
+esbuild-windows-32@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.14.tgz#6d293ddfb71229f21cc13d85d5d2f43e8131693b"
+  integrity sha512-6tVooQcxJCNenPp5GHZBs/RLu31q4B+BuF4MEoRxswT+Eq2JGF0ZWDRQwNKB8QVIo3t6Svc5wNGez+CwKNQjBg==
+
+esbuild-windows-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.14.tgz#08a36844b69542f8ec1cb33a5ddcea02b9d0b2e8"
+  integrity sha512-kl3BdPXh0/RD/dad41dtzj2itMUR4C6nQbXQCyYHHo4zoUoeIXhpCrSl7BAW1nv5EFL8stT1V+TQVXGZca5A2A==
+
+esbuild-windows-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.14.tgz#ca747ce4066d5b8a79dbe48fe6ecd92d202e5366"
+  integrity sha512-dCm1wTOm6HIisLanmybvRKvaXZZo4yEVrHh1dY0v582GThXJOzuXGja1HIQgV09RpSHYRL3m4KoUBL00l6SWEg==
+
+esbuild@^0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.14.tgz#3b99f20d628013c3e2ae90e67687e03f1d6eb071"
+  integrity sha512-aiK4ddv+uui0k52OqSHu4xxu+SzOim7Rlz4i25pMEiC8rlnGU0HJ9r+ZMfdWL5bzifg+nhnn7x4NSWTeehYblg==
   optionalDependencies:
-    esbuild-android-arm64 "0.14.13"
-    esbuild-darwin-64 "0.14.13"
-    esbuild-darwin-arm64 "0.14.13"
-    esbuild-freebsd-64 "0.14.13"
-    esbuild-freebsd-arm64 "0.14.13"
-    esbuild-linux-32 "0.14.13"
-    esbuild-linux-64 "0.14.13"
-    esbuild-linux-arm "0.14.13"
-    esbuild-linux-arm64 "0.14.13"
-    esbuild-linux-mips64le "0.14.13"
-    esbuild-linux-ppc64le "0.14.13"
-    esbuild-linux-s390x "0.14.13"
-    esbuild-netbsd-64 "0.14.13"
-    esbuild-openbsd-64 "0.14.13"
-    esbuild-sunos-64 "0.14.13"
-    esbuild-windows-32 "0.14.13"
-    esbuild-windows-64 "0.14.13"
-    esbuild-windows-arm64 "0.14.13"
+    esbuild-android-arm64 "0.14.14"
+    esbuild-darwin-64 "0.14.14"
+    esbuild-darwin-arm64 "0.14.14"
+    esbuild-freebsd-64 "0.14.14"
+    esbuild-freebsd-arm64 "0.14.14"
+    esbuild-linux-32 "0.14.14"
+    esbuild-linux-64 "0.14.14"
+    esbuild-linux-arm "0.14.14"
+    esbuild-linux-arm64 "0.14.14"
+    esbuild-linux-mips64le "0.14.14"
+    esbuild-linux-ppc64le "0.14.14"
+    esbuild-linux-s390x "0.14.14"
+    esbuild-netbsd-64 "0.14.14"
+    esbuild-openbsd-64 "0.14.14"
+    esbuild-sunos-64 "0.14.14"
+    esbuild-windows-32 "0.14.14"
+    esbuild-windows-64 "0.14.14"
+    esbuild-windows-arm64 "0.14.14"
 
 fast-check@*:
   version "2.13.0"
diff --git a/test/esm/esbuild-with-require/package.json b/test/esm/esbuild-with-require/package.json
index 9dec1b62..01777d53 100644
--- a/test/esm/esbuild-with-require/package.json
+++ b/test/esm/esbuild-with-require/package.json
@@ -10,7 +10,7 @@
     "fast-check": "*"
   },
   "devDependencies": {
-    "esbuild": "^0.14.13"
+    "esbuild": "^0.14.14"
   },
   "license": "MIT",
   "private": true
diff --git a/test/esm/esbuild-with-require/yarn.lock b/test/esm/esbuild-with-require/yarn.lock
index 3533312e..8ac7a5a6 100644
--- a/test/esm/esbuild-with-require/yarn.lock
+++ b/test/esm/esbuild-with-require/yarn.lock
@@ -2,119 +2,119 @@
 # yarn lockfile v1
 
 
-esbuild-android-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.13.tgz#a5c8cb275dc6dcaf2390abb639791ffc4aa6ead1"
-  integrity sha512-rhtwl+KJ3BzzXkK09N3/YbEF1i5WhriysJEStoeWNBzchx9hlmzyWmDGQQhu56HF78ua3JrVPyLOsdLGvtMvxQ==
-
-esbuild-darwin-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.13.tgz#51ad2fbf8c9d73c1d40e5f9ab6122ffa95f5b494"
-  integrity sha512-Fl47xIt5RMu50WIgMU93kwmUUJb+BPuL8R895n/aBNQqavS+KUMpLPoqKGABBV4myfx/fnAD/97X8Gt1C1YW6w==
-
-esbuild-darwin-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.13.tgz#7ff177193cffbba518a59dfa4666a2fbb3345330"
-  integrity sha512-UttqKRFXsWvuivcyAbFmo54vdkC9Me1ZYQNuoz/uBYDbkb2MgqKYG2+xoVKPBhLvhT0CKM5QGKD81flMH5BE6A==
-
-esbuild-freebsd-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.13.tgz#648357ff0ca399ce65f7e7ebfff701cf105c70f3"
-  integrity sha512-dlIhPFSp29Yq2TPh7Cm3/4M0uKjlfvOylHVNCRvRNiOvDbBol6/NZ3kLisczms+Yra0rxVapBPN1oMbSMuts9g==
-
-esbuild-freebsd-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.13.tgz#7cb0016dd64fd116624c56dcfe58b27fac8ceaee"
-  integrity sha512-bNOHLu7Oq6RwaAMnwPbJ40DVGPl9GlAOnfH/dFZ792f8hFEbopkbtVzo1SU1jjfY3TGLWOgqHNWxPxx1N7Au+g==
-
-esbuild-linux-32@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.13.tgz#50b197f6831e824660ab80d011b656505a0aae32"
-  integrity sha512-WzXyBx6zx16adGi7wPBvH2lRCBzYMcqnBRrJ8ciLIqYyruGvprZocX1nFWfiexjLcFxIElWnMNPX6LG7ULqyXA==
-
-esbuild-linux-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.13.tgz#d2ee4d780e3cadd129ab8988c7c75ca4bd636f3a"
-  integrity sha512-P6OFAfcoUvE7g9h/0UKm3qagvTovwqpCF1wbFLWe/BcCY8BS1bR/+SxUjCeKX2BcpIsg4/43ezHDE/ntg/iOpw==
-
-esbuild-linux-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.13.tgz#9151963c55cd42968c97f2fd354cd6ff9b3cb476"
-  integrity sha512-k/uIvmkm4mc7vyMvJVwILgGxi2F+FuvLdmESIIWoHrnxEfEekC5AWpI/R6GQ2OMfp8snebSQLs8KL05QPnt1zA==
-
-esbuild-linux-arm@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.13.tgz#80e94cd8920607dc0addb97bac7ff5988d0fc28f"
-  integrity sha512-4jmm0UySCg3Wi6FEBS7jpiPb1IyckI5um5kzYRwulHxPzkiokd6cgpcsTakR4/Y84UEicS8LnFAghHhXHZhbFg==
-
-esbuild-linux-mips64le@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.13.tgz#8e7eeef567b0895f2ecc4d66b1f1e5a542f1ce5b"
-  integrity sha512-vwYtgjQ1TRlUGL88km9wH9TjXsdZyZ/Xht1ASptg5XGRlqGquVjLGH11PfLLunoMdkQ0YTXR68b4l5gRfjVbyg==
-
-esbuild-linux-ppc64le@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.13.tgz#ffbe9915a1d8080f9810a9c5938f453003c6de98"
-  integrity sha512-0KqDSIkZaYugtcdpFCd3eQ38Fg6TzhxmOpkhDIKNTwD/W2RoXeiS+Z4y5yQ3oysb/ySDOxWkwNqTdXS4sz2LdQ==
-
-esbuild-linux-s390x@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.13.tgz#e27274d12f198580892432115fc0de432431d33d"
-  integrity sha512-bG20i7d0CN97fwPN9LaLe64E2IrI0fPZWEcoiff9hzzsvo/fQCx0YjMbPC2T3gqQ48QZRltdU9hQilTjHk3geQ==
-
-esbuild-netbsd-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.13.tgz#78199fa57d5794e6ac6c33993dd0588fba22b353"
-  integrity sha512-jz96PQb0ltqyqLggPpcRbWxzLvWHvrZBHZQyjcOzKRDqg1fR/R1y10b1Cuv84xoIbdAf+ceNUJkMN21FfR9G2g==
-
-esbuild-openbsd-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.13.tgz#5394336b602e1db15583bbef7d827a2b9648e373"
-  integrity sha512-bp6zSo3kDCXKPM5MmVUg6DEpt+yXDx37iDGzNTn3Kf9xh6d0cdITxUC4Bx6S3Di79GVYubWs+wNjSRVFIJpryw==
-
-esbuild-sunos-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.13.tgz#4afcddcece51f943149fa07274bd58f64e0913a8"
-  integrity sha512-08Fne1T9QHYxUnu55sV9V4i/yECADOaI1zMGET2YUa8SRkib10i80hc89U7U/G02DxpN/KUJMWEGq2wKTn0QFQ==
-
-esbuild-windows-32@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.13.tgz#cb06267f270bbf7ea6631cc78b8f6e3647975c44"
-  integrity sha512-MW3BMIi9+fzTyDdljH0ftfT/qlD3t+aVzle1O+zZ2MgHRMQD20JwWgyqoJXhe6uDVyunrAUbcjH3qTIEZN3isg==
-
-esbuild-windows-64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.13.tgz#3bbfba58e0185121280bd47ccd073b6c1849fd27"
-  integrity sha512-d7+0N+EOgBKdi/nMxlQ8QA5xHBlpcLtSrYnHsA+Xp4yZk28dYfRw1+embsHf5uN5/1iPvrJwPrcpgDH1xyy4JA==
-
-esbuild-windows-arm64@0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.13.tgz#9203d40d915d809c50bc91af5a8373e5f5abfc4c"
-  integrity sha512-oX5hmgXk9yNKbb5AxThzRQm/E9kiHyDll7JJeyeT1fuGENTifv33f0INCpjBQ+Ty5ChKc84++ZQTEBwLCA12Kw==
-
-esbuild@^0.14.13:
-  version "0.14.13"
-  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.13.tgz#ce3fc7c45a6b8a40caad43daa39cdb9c1e84930a"
-  integrity sha512-FIxvAdj3i2oHA6ex+E67bG7zlSTO+slt8kU2ogHDgGtrQLy2HNChv3PYjiFTYkt8hZbEAniZCXVeHn+FrHt7dA==
+esbuild-android-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.14.tgz#3705f32f209deeb11c275af47c298c8783dd5f0c"
+  integrity sha512-be/Uw6DdpQiPfula1J4bdmA+wtZ6T3BRCZsDMFB5X+k0Gp8TIh9UvmAcqvKNnbRAafSaXG3jPCeXxDKqnc8hFQ==
+
+esbuild-darwin-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.14.tgz#c07e4eae6d938300a2d330ea82494c55bcea84e5"
+  integrity sha512-BEexYmjWafcISK8cT6O98E3TfcLuZL8DKuubry6G54n2+bD4GkoRD6HYUOnCkfl2p7jodA+s4369IjSFSWjtHg==
+
+esbuild-darwin-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.14.tgz#a8631e13a51a6f784fb0906e2a64c6ab53988755"
+  integrity sha512-tnBKm41pDOB1GtZ8q/w26gZlLLRzVmP8fdsduYjvM+yFD7E2DLG4KbPAqFMWm4Md9B+DitBglP57FY7AznxbTg==
+
+esbuild-freebsd-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.14.tgz#c280c2b944746b27ee6c6487c2691865c90bed2e"
+  integrity sha512-Q9Rx6sgArOHalQtNwAaIzJ6dnQ8A+I7f/RsQsdkS3JrdzmnlFo8JEVofTmwVQLoIop7OKUqIVOGP4PoQcwfVMA==
+
+esbuild-freebsd-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.14.tgz#aa4e21276efcf20e5ab2487e91ca1d789573189b"
+  integrity sha512-TJvq0OpLM7BkTczlyPIphcvnwrQwQDG1HqxzoYePWn26SMUAlt6wrLnEvxdbXAvNvDLVzG83kA+JimjK7aRNBA==
+
+esbuild-linux-32@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.14.tgz#3db4d929239203ce38a9060d5419ac6a6d28846c"
+  integrity sha512-h/CrK9Baimt5VRbu8gqibWV7e1P9l+mkanQgyOgv0Ng3jHT1NVFC9e6rb1zbDdaJVmuhWX5xVliUA5bDDCcJeg==
+
+esbuild-linux-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.14.tgz#f880026254c1f565a7a10fdebb7cff9b083a127d"
+  integrity sha512-IC+wAiIg/egp5OhQp4W44D9PcBOH1b621iRn1OXmlLzij9a/6BGr9NMIL4CRwz4j2kp3WNZu5sT473tYdynOuQ==
+
+esbuild-linux-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.14.tgz#a34bc3076e50b109c3b8c8bad9c146e35942322b"
+  integrity sha512-6QVul3RI4M5/VxVIRF/I5F+7BaxzR3DfNGoqEVSCZqUbgzHExPn+LXr5ly1C7af2Kw4AHpo+wDqx8A4ziP9avw==
+
+esbuild-linux-arm@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.14.tgz#231ffd12fef69ee06365d4c94b69850e4830e927"
+  integrity sha512-gxpOaHOPwp7zSmcKYsHrtxabScMqaTzfSQioAMUaB047YiMuDBzqVcKBG8OuESrYkGrL9DDljXr/mQNg7pbdaQ==
+
+esbuild-linux-mips64le@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.14.tgz#bd00570e3a30422224b732c7a5f262146c357403"
+  integrity sha512-4Jl5/+xoINKbA4cesH3f4R+q0vltAztZ6Jm8YycS8lNhN1pgZJBDxWfI6HUMIAdkKlIpR1PIkA9aXQgZ8sxFAg==
+
+esbuild-linux-ppc64le@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.14.tgz#430609413fd9e04d9def4e3f06726b031b23d825"
+  integrity sha512-BitW37GxeebKxqYNl4SVuSdnIJAzH830Lr6Mkq3pBHXtzQay0vK+IeOR/Ele1GtNVJ+/f8wYM53tcThkv5SC5w==
+
+esbuild-linux-s390x@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.14.tgz#2f0d8cbfe53cf3cb97f6372549a41a8051dbd689"
+  integrity sha512-vLj6p76HOZG3wfuTr5MyO3qW5iu8YdhUNxuY+tx846rPo7GcKtYSPMusQjeVEfZlJpSYoR+yrNBBxq+qVF9zrw==
+
+esbuild-netbsd-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.14.tgz#3e44de35e1add7e9582f3c0d2558d86aafbc813b"
+  integrity sha512-fn8looXPQhpVqUyCBWUuPjesH+yGIyfbIQrLKG05rr1Kgm3rZD/gaYrd3Wpmf5syVZx70pKZPvdHp8OTA+y7cQ==
+
+esbuild-openbsd-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.14.tgz#04710ef1d01cd9f15d54f50d20b5a3778f8306a2"
+  integrity sha512-HdAnJ399pPff3SKbd8g+P4o5znseni5u5n5rJ6Z7ouqOdgbOwHe2ofZbMow17WMdNtz1IyOZk2Wo9Ve6/lZ4Rg==
+
+esbuild-sunos-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.14.tgz#8e583dd92c5c7ac4303ddc37f588e44211e04e19"
+  integrity sha512-bmDHa99ulsGnYlh/xjBEfxoGuC8CEG5OWvlgD+pF7bKKiVTbtxqVCvOGEZeoDXB+ja6AvHIbPxrEE32J+m5nqQ==
+
+esbuild-windows-32@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.14.tgz#6d293ddfb71229f21cc13d85d5d2f43e8131693b"
+  integrity sha512-6tVooQcxJCNenPp5GHZBs/RLu31q4B+BuF4MEoRxswT+Eq2JGF0ZWDRQwNKB8QVIo3t6Svc5wNGez+CwKNQjBg==
+
+esbuild-windows-64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.14.tgz#08a36844b69542f8ec1cb33a5ddcea02b9d0b2e8"
+  integrity sha512-kl3BdPXh0/RD/dad41dtzj2itMUR4C6nQbXQCyYHHo4zoUoeIXhpCrSl7BAW1nv5EFL8stT1V+TQVXGZca5A2A==
+
+esbuild-windows-arm64@0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.14.tgz#ca747ce4066d5b8a79dbe48fe6ecd92d202e5366"
+  integrity sha512-dCm1wTOm6HIisLanmybvRKvaXZZo4yEVrHh1dY0v582GThXJOzuXGja1HIQgV09RpSHYRL3m4KoUBL00l6SWEg==
+
+esbuild@^0.14.14:
+  version "0.14.14"
+  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.14.tgz#3b99f20d628013c3e2ae90e67687e03f1d6eb071"
+  integrity sha512-aiK4ddv+uui0k52OqSHu4xxu+SzOim7Rlz4i25pMEiC8rlnGU0HJ9r+ZMfdWL5bzifg+nhnn7x4NSWTeehYblg==
   optionalDependencies:
-    esbuild-android-arm64 "0.14.13"
-    esbuild-darwin-64 "0.14.13"
-    esbuild-darwin-arm64 "0.14.13"
-    esbuild-freebsd-64 "0.14.13"
-    esbuild-freebsd-arm64 "0.14.13"
-    esbuild-linux-32 "0.14.13"
-    esbuild-linux-64 "0.14.13"
-    esbuild-linux-arm "0.14.13"
-    esbuild-linux-arm64 "0.14.13"
-    esbuild-linux-mips64le "0.14.13"
-    esbuild-linux-ppc64le "0.14.13"
-    esbuild-linux-s390x "0.14.13"
-    esbuild-netbsd-64 "0.14.13"
-    esbuild-openbsd-64 "0.14.13"
-    esbuild-sunos-64 "0.14.13"
-    esbuild-windows-32 "0.14.13"
-    esbuild-windows-64 "0.14.13"
-    esbuild-windows-arm64 "0.14.13"
+    esbuild-android-arm64 "0.14.14"
+    esbuild-darwin-64 "0.14.14"
+    esbuild-darwin-arm64 "0.14.14"
+    esbuild-freebsd-64 "0.14.14"
+    esbuild-freebsd-arm64 "0.14.14"
+    esbuild-linux-32 "0.14.14"
+    esbuild-linux-64 "0.14.14"
+    esbuild-linux-arm "0.14.14"
+    esbuild-linux-arm64 "0.14.14"
+    esbuild-linux-mips64le "0.14.14"
+    esbuild-linux-ppc64le "0.14.14"
+    esbuild-linux-s390x "0.14.14"
+    esbuild-netbsd-64 "0.14.14"
+    esbuild-openbsd-64 "0.14.14"
+    esbuild-sunos-64 "0.14.14"
+    esbuild-windows-32 "0.14.14"
+    esbuild-windows-64 "0.14.14"
+    esbuild-windows-arm64 "0.14.14"
 
 fast-check@*:
   version "2.13.0"
diff --git a/test/esm/rollup-with-require/package.json b/test/esm/rollup-with-require/package.json
index 827e9b50..c3a6b644 100644
--- a/test/esm/rollup-with-require/package.json
+++ b/test/esm/rollup-with-require/package.json
@@ -12,7 +12,7 @@
   "devDependencies": {
     "@rollup/plugin-commonjs": "^21.0.1",
     "@rollup/plugin-node-resolve": "^13.1.3",
-    "rollup": "^2.66.0"
+    "rollup": "^2.66.1"
   },
   "license": "MIT",
   "private": true
diff --git a/test/esm/rollup-with-require/yarn.lock b/test/esm/rollup-with-require/yarn.lock
index 57e6353f..856ff2e0 100644
--- a/test/esm/rollup-with-require/yarn.lock
+++ b/test/esm/rollup-with-require/yarn.lock
@@ -223,10 +223,10 @@ resolve@^1.17.0, resolve@^1.19.0:
     is-core-module "^2.1.0"
     path-parse "^1.0.6"
 
-rollup@^2.66.0:
-  version "2.66.0"
-  resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.66.0.tgz#ee529ea15a20485d579039637fec3050bad03bbb"
-  integrity sha512-L6mKOkdyP8HK5kKJXaiWG7KZDumPJjuo1P+cfyHOJPNNTK3Moe7zCH5+fy7v8pVmHXtlxorzaBjvkBMB23s98g==
+rollup@^2.66.1:
+  version "2.66.1"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.66.1.tgz#366b0404de353c4331d538c3ad2963934fcb4937"
+  integrity sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w==
   optionalDependencies:
     fsevents "~2.3.2"
 
diff --git a/test/esm/webpack-with-import/package.json b/test/esm/webpack-with-import/package.json
index 605b9f76..a5e192bc 100644
--- a/test/esm/webpack-with-import/package.json
+++ b/test/esm/webpack-with-import/package.json
@@ -11,7 +11,7 @@
   },
   "devDependencies": {
     "querystring-es3": "^0.2.1",
-    "webpack": "^5.67.0",
+    "webpack": "^5.68.0",
     "webpack-cli": "^4.9.2"
   },
   "license": "MIT",
diff --git a/test/esm/webpack-with-import/yarn.lock b/test/esm/webpack-with-import/yarn.lock
index 6f168e1e..855e3abc 100644
--- a/test/esm/webpack-with-import/yarn.lock
+++ b/test/esm/webpack-with-import/yarn.lock
@@ -795,10 +795,10 @@ webpack-sources@^3.2.3:
   resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
   integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
 
-webpack@^5.67.0:
-  version "5.67.0"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.67.0.tgz#cb43ca2aad5f7cc81c4cd36b626e6b819805dbfd"
-  integrity sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==
+webpack@^5.68.0:
+  version "5.68.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.68.0.tgz#a653a58ed44280062e47257f260117e4be90d560"
+  integrity sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==
   dependencies:
     "@types/eslint-scope" "^3.7.0"
     "@types/estree" "^0.0.50"
diff --git a/test/esm/webpack-with-require/package.json b/test/esm/webpack-with-require/package.json
index 605b9f76..a5e192bc 100644
--- a/test/esm/webpack-with-require/package.json
+++ b/test/esm/webpack-with-require/package.json
@@ -11,7 +11,7 @@
   },
   "devDependencies": {
     "querystring-es3": "^0.2.1",
-    "webpack": "^5.67.0",
+    "webpack": "^5.68.0",
     "webpack-cli": "^4.9.2"
   },
   "license": "MIT",
diff --git a/test/esm/webpack-with-require/yarn.lock b/test/esm/webpack-with-require/yarn.lock
index 6f168e1e..855e3abc 100644
--- a/test/esm/webpack-with-require/yarn.lock
+++ b/test/esm/webpack-with-require/yarn.lock
@@ -795,10 +795,10 @@ webpack-sources@^3.2.3:
   resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
   integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
 
-webpack@^5.67.0:
-  version "5.67.0"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.67.0.tgz#cb43ca2aad5f7cc81c4cd36b626e6b819805dbfd"
-  integrity sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==
+webpack@^5.68.0:
+  version "5.68.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.68.0.tgz#a653a58ed44280062e47257f260117e4be90d560"
+  integrity sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==
   dependencies:
     "@types/eslint-scope" "^3.7.0"
     "@types/estree" "^0.0.50"
diff --git a/test/unit/arbitrary/__snapshots__/sparseArray.spec.ts.snap b/test/unit/arbitrary/__snapshots__/sparseArray.spec.ts.snap
index 32566d54..edfb296a 100644
--- a/test/unit/arbitrary/__snapshots__/sparseArray.spec.ts.snap
+++ b/test/unit/arbitrary/__snapshots__/sparseArray.spec.ts.snap
@@ -1,5 +1,114 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`sparseArray (integration) should be able to shrink [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49] with fc.sparseArray(..., {}) 1`] = `
+"[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]
+├> Array(50)
+|  ├> []
+|  ├> [,,,,,,,,,,,,,,,,,,,,,,,,,]
+|  |  ├> [,,,,,,,,,,,,,]
+|  |  |  ├> [,,,,,,,]
+|  |  |  |  ├> [,,,,]
+|  |  |  |  |  ├> [,,]
+|  |  |  |  |  |  └> [,]
+|  |  |  |  |  |     └> []
+|  |  |  |  |  └> [,,,]
+|  |  |  |  |     └> [,,]
+|  |  |  |  |        ├> []
+|  |  |  |  |        └> [,]
+|  |  |  |  |           └> []
+|  |  |  |  └> [,,,,,,]
+|  |  |  |     └> [,,,,,]
+|  |  |  |        └> [,,,,]
+|  |  |  |           ├> []
+|  |  |  |           ├> [,,]
+|  |  |  |           |  └> [,]
+|  |  |  |           |     └> []
+|  |  |  |           └> [,,,]
+|  |  |  |              └> [,,]
+|  |  |  |                 ├> []
+|  |  |  |                 └> [,]
+|  |  |  |                    └> []
+|  |  |  ├> [,,,,,,,,,,]
+|  |  |  |  └> [,,,,,,,,,]
+|  |  |  |     └> [,,,,,,,,]
+|  |  |  |        └> [,,,,,,,]
+|  |  |  |           ├> []
+|  |  |  |           ├> [,,,,]
+|  |  |  |           |  ├> [,,]
+|  |  |  |           |  |  └> [,]
+|  |  |  |           |  |     └> []
+|  |  |  |           |  └> [,,,]
+|  |  |  |           |     └> [,,]
+|  |  |  |           |        ├> []
+|  |  |  |           |        └> [,]
+|  |  |  |           |           └> []
+|  |  |  |           └> [,,,,,,]
+|  |  |  |              └> [,,,,,]
+|  |  |  |                 └> [,,,,]
+|  |  |  |                    ├> []
+|  |  |  |                    ├> [,,]
+|  |  |  |                    |  └> [,]
+|  |  |  |                    |     └> []
+|  |  |  |                    └> [,,,]
+|  |  |  |                       └> [,,]
+|  |  |  |                          ├> []
+|  |  |  |                          └> [,]
+|  |  |  |                             └> []
+|  |  |  └> [,,,,,,,,,,,,]
+|  |  |     └> [,,,,,,,,,,,]
+|  |  |        └> [,,,,,,,,,,]
+|  |  |           ├> []
+|  |  |           ├> [,,,,,]
+|  |  |           |  ├> [,,,]
+|  |  |           |  |  └> [,,]
+|  |  |           |  |     └> [,]
+|  |  |           |  |        └> []
+|  |  |           |  └> [,,,,]
+|  |  |           |     └> [,,,]
+|  |  |           |        ├> []
+|  |  |           |        └> [,,]
+|  |  |           |           └> [,]
+|  |  |           |              └> []
+|  |  |           ├> [,,,,,,,,]
+|  |  |           |  └> [,,,,,,,]
+|  |  |           |     └> [,,,,,,]
+|  |  |           |        └> [,,,,,]
+|  |  |           |           ├> []
+|  |  |           |           ├> [,,,]
+|  |  |           |           |  └> [,,]
+|  |  |           |           |     └> [,]
+|  |  |           |           |        └> []
+|  |  |           |           └> [,,,,]
+|  |  |           |              └> [,,,]
+|  |  |           |                 ├> []
+|  |  |           |                 └> [,,]
+|  |  |           |                    └> [,]
+|  |  |           |                       └> []
+|  |  |           └> [,,,,,,,,,]
+|  |  |              └> [,,,,,,,,]
+|  |  |                 ├> []
+|  |  |                 ├> [,,,,]
+|  |  |                 |  ├> [,,]
+|  |  |                 |  |  └> [,]
+|  |  |                 |  |     └> []
+|  |  |                 |  └> [,,,]
+|  |  |                 |     └> [,,]
+|  |  |                 |        ├> []
+|  |  |                 |        └> [,]
+|  |  |                 |           └> []
+|  |  |                 ├> [,,,,,,]
+|  |  |                 |  └> [,,,,,]
+|  |  |                 |     └> [,,,,]
+|  |  |                 |        ├> []
+|  |  |                 |        ├> [,,]
+|  |  |                 |        |  └> …
+|  |  |                 |        └> …
+|  |  |                 └> …
+|  |  └> …
+|  └> …
+└> …"
+`;
+
 exports[`sparseArray (integration) should be able to shrink [1, undefined, undefined, undefined, undefined] with fc.sparseArray(..., {"noTrailingHole": false}) 1`] = `
 "[1,,,,,]
 ├> [,,,,,]
@@ -106,6 +215,116 @@ exports[`sparseArray (integration) should be able to shrink [1, undefined, undef
 └> …"
 `;
 
+exports[`sparseArray (integration) should be able to shrink [undefined, 7, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined] with fc.sparseArray(..., {}) 1`] = `
+"Object.assign(Array(200),{1:7})
+├> Array(200)
+|  ├> []
+|  ├> Array(100)
+|  |  ├> Array(50)
+|  |  |  ├> [,,,,,,,,,,,,,,,,,,,,,,,,,]
+|  |  |  |  ├> [,,,,,,,,,,,,,]
+|  |  |  |  |  ├> [,,,,,,,]
+|  |  |  |  |  |  ├> [,,,,]
+|  |  |  |  |  |  |  ├> [,,]
+|  |  |  |  |  |  |  |  └> [,]
+|  |  |  |  |  |  |  |     └> []
+|  |  |  |  |  |  |  └> [,,,]
+|  |  |  |  |  |  |     └> [,,]
+|  |  |  |  |  |  |        ├> []
+|  |  |  |  |  |  |        └> [,]
+|  |  |  |  |  |  |           └> []
+|  |  |  |  |  |  └> [,,,,,,]
+|  |  |  |  |  |     └> [,,,,,]
+|  |  |  |  |  |        └> [,,,,]
+|  |  |  |  |  |           ├> []
+|  |  |  |  |  |           ├> [,,]
+|  |  |  |  |  |           |  └> [,]
+|  |  |  |  |  |           |     └> []
+|  |  |  |  |  |           └> [,,,]
+|  |  |  |  |  |              └> [,,]
+|  |  |  |  |  |                 ├> []
+|  |  |  |  |  |                 └> [,]
+|  |  |  |  |  |                    └> []
+|  |  |  |  |  ├> [,,,,,,,,,,]
+|  |  |  |  |  |  └> [,,,,,,,,,]
+|  |  |  |  |  |     └> [,,,,,,,,]
+|  |  |  |  |  |        └> [,,,,,,,]
+|  |  |  |  |  |           ├> []
+|  |  |  |  |  |           ├> [,,,,]
+|  |  |  |  |  |           |  ├> [,,]
+|  |  |  |  |  |           |  |  └> [,]
+|  |  |  |  |  |           |  |     └> []
+|  |  |  |  |  |           |  └> [,,,]
+|  |  |  |  |  |           |     └> [,,]
+|  |  |  |  |  |           |        ├> []
+|  |  |  |  |  |           |        └> [,]
+|  |  |  |  |  |           |           └> []
+|  |  |  |  |  |           └> [,,,,,,]
+|  |  |  |  |  |              └> [,,,,,]
+|  |  |  |  |  |                 └> [,,,,]
+|  |  |  |  |  |                    ├> []
+|  |  |  |  |  |                    ├> [,,]
+|  |  |  |  |  |                    |  └> [,]
+|  |  |  |  |  |                    |     └> []
+|  |  |  |  |  |                    └> [,,,]
+|  |  |  |  |  |                       └> [,,]
+|  |  |  |  |  |                          ├> []
+|  |  |  |  |  |                          └> [,]
+|  |  |  |  |  |                             └> []
+|  |  |  |  |  └> [,,,,,,,,,,,,]
+|  |  |  |  |     └> [,,,,,,,,,,,]
+|  |  |  |  |        └> [,,,,,,,,,,]
+|  |  |  |  |           ├> []
+|  |  |  |  |           ├> [,,,,,]
+|  |  |  |  |           |  ├> [,,,]
+|  |  |  |  |           |  |  └> [,,]
+|  |  |  |  |           |  |     └> [,]
+|  |  |  |  |           |  |        └> []
+|  |  |  |  |           |  └> [,,,,]
+|  |  |  |  |           |     └> [,,,]
+|  |  |  |  |           |        ├> []
+|  |  |  |  |           |        └> [,,]
+|  |  |  |  |           |           └> [,]
+|  |  |  |  |           |              └> []
+|  |  |  |  |           ├> [,,,,,,,,]
+|  |  |  |  |           |  └> [,,,,,,,]
+|  |  |  |  |           |     └> [,,,,,,]
+|  |  |  |  |           |        └> [,,,,,]
+|  |  |  |  |           |           ├> []
+|  |  |  |  |           |           ├> [,,,]
+|  |  |  |  |           |           |  └> [,,]
+|  |  |  |  |           |           |     └> [,]
+|  |  |  |  |           |           |        └> []
+|  |  |  |  |           |           └> [,,,,]
+|  |  |  |  |           |              └> [,,,]
+|  |  |  |  |           |                 ├> []
+|  |  |  |  |           |                 └> [,,]
+|  |  |  |  |           |                    └> [,]
+|  |  |  |  |           |                       └> []
+|  |  |  |  |           └> [,,,,,,,,,]
+|  |  |  |  |              └> [,,,,,,,,]
+|  |  |  |  |                 ├> []
+|  |  |  |  |                 ├> [,,,,]
+|  |  |  |  |                 |  ├> [,,]
+|  |  |  |  |                 |  |  └> [,]
+|  |  |  |  |                 |  |     └> []
+|  |  |  |  |                 |  └> [,,,]
+|  |  |  |  |                 |     └> [,,]
+|  |  |  |  |                 |        ├> []
+|  |  |  |  |                 |        └> [,]
+|  |  |  |  |                 |           └> []
+|  |  |  |  |                 ├> [,,,,,,]
+|  |  |  |  |                 |  └> [,,,,,]
+|  |  |  |  |                 |     └> [,,,,]
+|  |  |  |  |                 |        └> …
+|  |  |  |  |                 └> …
+|  |  |  |  └> …
+|  |  |  └> …
+|  |  └> …
+|  └> …
+└> …"
+`;
+
 exports[`sparseArray (integration) should be able to shrink [undefined, undefined, undefined, 4] with fc.sparseArray(..., {"maxLength": 4}) 1`] = `
 "[,,,4]
 ├> [,,,,]
diff --git a/test/unit/arbitrary/__test-helpers__/NextArbitraryAssertions.ts b/test/unit/arbitrary/__test-helpers__/NextArbitraryAssertions.ts
index c2588c0e..166991fd 100644
--- a/test/unit/arbitrary/__test-helpers__/NextArbitraryAssertions.ts
+++ b/test/unit/arbitrary/__test-helpers__/NextArbitraryAssertions.ts
@@ -3,7 +3,9 @@ import * as fc from '../../../../lib/fast-check';
 
 import { NextArbitrary } from '../../../../src/check/arbitrary/definition/NextArbitrary';
 import { NextValue } from '../../../../src/check/arbitrary/definition/NextValue';
+import { configureGlobal, readConfigureGlobal } from '../../../../src/check/runner/configuration/GlobalParameters';
 import { Random } from '../../../../src/random/generator/Random';
+import { sizeArb } from './SizeHelpers';
 
 // Minimal requirements
 // > The following assertions are supposed to be fulfilled by any of the arbitraries
@@ -220,6 +222,44 @@ export function assertProduceSomeSpecificValues<T, U = never>(
   expect(foundOne).toBe(true);
 }
 
+export function assertGenerateIndependentOfSize<T, U = never>(
+  arbitraryBuilder: (extraParameters: U) => NextArbitrary<T>,
+  options: {
+    isEqual?: (v1: T, v2: T, extraParameters: U) => void | boolean;
+    isEqualContext?: (c1: unknown, c2: unknown, extraParameters: U) => void | boolean;
+    extraParameters?: fc.Arbitrary<U>;
+    assertParameters?: fc.Parameters<unknown>;
+  } = {}
+): void {
+  const {
+    extraParameters = fc.constant(undefined as unknown as U) as fc.Arbitrary<U>,
+    isEqual,
+    isEqualContext,
+    assertParameters,
+  } = options;
+  assertGenerateEquivalentTo(
+    (extra) => arbitraryBuilder(extra.requested),
+    (extra) => {
+      const previousGlobal = readConfigureGlobal();
+      try {
+        configureGlobal(extra.global);
+        return arbitraryBuilder(extra.requested);
+      } finally {
+        configureGlobal(previousGlobal || {});
+      }
+    },
+    {
+      extraParameters: fc.record({
+        requested: extraParameters,
+        global: fc.record({ defaultSizeToMaxWhenMaxSpecified: fc.boolean(), baseSize: sizeArb }, { requiredKeys: [] }),
+      }),
+      isEqual: isEqual !== undefined ? (a, b, extra) => isEqual(a, b, extra.requested) : undefined,
+      isEqualContext: isEqualContext !== undefined ? (a, b, extra) => isEqualContext(a, b, extra.requested) : undefined,
+      assertParameters,
+    }
+  );
+}
+
 // Various helpers
 
 function randomFromSeed(seed: number): Random {
diff --git a/test/unit/arbitrary/_internals/WithShrinkFromOtherArbitrary.spec.ts b/test/unit/arbitrary/_internals/WithShrinkFromOtherArbitrary.spec.ts
new file mode 100644
index 00000000..0eaf22c1
--- /dev/null
+++ b/test/unit/arbitrary/_internals/WithShrinkFromOtherArbitrary.spec.ts
@@ -0,0 +1,291 @@
+import { WithShrinkFromOtherArbitrary } from '../../../../src/arbitrary/_internals/WithShrinkFromOtherArbitrary';
+import { NextValue } from '../../../../src/check/arbitrary/definition/NextValue';
+import { fakeNextArbitrary } from '../__test-helpers__/NextArbitraryHelpers';
+import { fakeRandom } from '../__test-helpers__/RandomHelpers';
+import { Stream } from '../../../../src/stream/Stream';
+import fc from '../../../../lib/fast-check';
+
+describe('WithShrinkFromOtherArbitrary', () => {
+  describe('generate', () => {
+    it('should only use the first arbitrary to generate values', () => {
+      fc.assert(
+        fc.property(
+          fc.option(fc.integer({ min: 2 }), { nil: undefined }),
+          fc.anything(),
+          fc.anything(),
+          (biasFactor, vA, cA) => {
+            // Arrange
+            const {
+              instance: generatorArbitrary,
+              generate: generateA,
+              shrink: shrinkA,
+              canShrinkWithoutContext: canShrinkWithoutContextA,
+            } = fakeNextArbitrary();
+            const {
+              instance: shrinkerArbitrary,
+              generate: generateB,
+              shrink: shrinkB,
+              canShrinkWithoutContext: canShrinkWithoutContextB,
+            } = fakeNextArbitrary();
+            generateA.mockReturnValueOnce(new NextValue(vA, cA));
+            const { instance: mrng } = fakeRandom();
+
+            // Act
+            const arb = new WithShrinkFromOtherArbitrary(generatorArbitrary, shrinkerArbitrary);
+            const g = arb.generate(mrng, biasFactor);
+
+            // Assert
+            expect(g.value).toBe(vA);
+            expect(generateA).toHaveBeenCalledWith(mrng, biasFactor);
+            expect(shrinkA).not.toHaveBeenCalled();
+            expect(canShrinkWithoutContextA).not.toHaveBeenCalled();
+            expect(generateB).not.toHaveBeenCalled();
+            expect(shrinkB).not.toHaveBeenCalled();
+            expect(canShrinkWithoutContextB).not.toHaveBeenCalled();
+          }
+        )
+      );
+    });
+  });
+
+  describe('canShrinkWithoutContext', () => {
+    it.each`
+      canShrink
+      ${false}
+      ${true}
+    `(
+      'should only use the second arbitrary to check if it can shrink without context (with canShrink=$canShrink)',
+      ({ canShrink }) => {
+        // Arrange
+        const vA = Symbol();
+        const {
+          instance: generatorArbitrary,
+          generate: generateA,
+          shrink: shrinkA,
+          canShrinkWithoutContext: canShrinkWithoutContextA,
+        } = fakeNextArbitrary();
+        const {
+          instance: shrinkerArbitrary,
+          generate: generateB,
+          shrink: shrinkB,
+          canShrinkWithoutContext: canShrinkWithoutContextB,
+        } = fakeNextArbitrary();
+        canShrinkWithoutContextB.mockReturnValueOnce(canShrink);
+
+        // Act
+        const arb = new WithShrinkFromOtherArbitrary(generatorArbitrary, shrinkerArbitrary);
+        const out = arb.canShrinkWithoutContext(vA);
+
+        // Assert
+        expect(out).toBe(canShrink);
+        expect(generateA).not.toHaveBeenCalled();
+        expect(shrinkA).not.toHaveBeenCalled();
+        expect(canShrinkWithoutContextA).not.toHaveBeenCalled();
+        expect(generateB).not.toHaveBeenCalled();
+        expect(shrinkB).not.toHaveBeenCalled();
+        expect(canShrinkWithoutContextB).toHaveBeenCalledWith(vA);
+      }
+    );
+  });
+
+  describe('shrink', () => {
+    it('should only use the first arbitrary for values it generated (coming with the context)', () => {
+      fc.assert(
+        fc.property(
+          fc.option(fc.integer({ min: 2 }), { nil: undefined }),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          (biasFactor, vA, cA, vAA, cAA, vAB, cAB) => {
+            // Arrange
+            const {
+              instance: generatorArbitrary,
+              generate: generateA,
+              shrink: shrinkA,
+              canShrinkWithoutContext: canShrinkWithoutContextA,
+            } = fakeNextArbitrary();
+            const {
+              instance: shrinkerArbitrary,
+              generate: generateB,
+              shrink: shrinkB,
+              canShrinkWithoutContext: canShrinkWithoutContextB,
+            } = fakeNextArbitrary();
+            generateA.mockReturnValueOnce(new NextValue(vA, cA));
+            shrinkA.mockReturnValueOnce(Stream.of(new NextValue(vAA, cAA), new NextValue(vAB, cAB)));
+            const { instance: mrng } = fakeRandom();
+
+            // Act
+            const arb = new WithShrinkFromOtherArbitrary(generatorArbitrary, shrinkerArbitrary);
+            const g = arb.generate(mrng, biasFactor);
+            const shrinks = [...arb.shrink(g.value, g.context)];
+
+            // Assert
+            expect(shrinks).toHaveLength(2);
+            expect(shrinks[0].value).toBe(vAA);
+            expect(shrinks[1].value).toBe(vAB);
+            expect(generateA).toHaveBeenCalledWith(mrng, biasFactor);
+            expect(shrinkA).toHaveBeenCalledWith(vA, cA);
+            expect(canShrinkWithoutContextA).not.toHaveBeenCalled();
+            expect(generateB).not.toHaveBeenCalled();
+            expect(shrinkB).not.toHaveBeenCalled();
+            expect(canShrinkWithoutContextB).not.toHaveBeenCalled();
+          }
+        )
+      );
+    });
+
+    it('should only use the first arbitrary for values it shrunk (coming with the context)', () => {
+      fc.assert(
+        fc.property(
+          fc.option(fc.integer({ min: 2 }), { nil: undefined }),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          (biasFactor, vA, cA, vAA, cAA, vAB, cAB, vAC, cAC, vABA, cABA) => {
+            // Arrange
+            const {
+              instance: generatorArbitrary,
+              generate: generateA,
+              shrink: shrinkA,
+              canShrinkWithoutContext: canShrinkWithoutContextA,
+            } = fakeNextArbitrary();
+            const {
+              instance: shrinkerArbitrary,
+              generate: generateB,
+              shrink: shrinkB,
+              canShrinkWithoutContext: canShrinkWithoutContextB,
+            } = fakeNextArbitrary();
+            generateA.mockReturnValueOnce(new NextValue(vA, cA));
+            shrinkA.mockReturnValueOnce(
+              Stream.of(new NextValue(vAA, cAA), new NextValue(vAB, cAB), new NextValue(vAC, cAC))
+            );
+            shrinkA.mockReturnValueOnce(Stream.of(new NextValue(vABA, cABA)));
+            const { instance: mrng } = fakeRandom();
+
+            // Act
+            const arb = new WithShrinkFromOtherArbitrary(generatorArbitrary, shrinkerArbitrary);
+            const g = arb.generate(mrng, biasFactor);
+            const g2 = [...arb.shrink(g.value, g.context)][1];
+            const shrinks = [...arb.shrink(g2.value, g2.context)];
+
+            // Assert
+            expect(shrinks).toHaveLength(1);
+            expect(shrinks[0].value).toBe(vABA);
+            expect(generateA).toHaveBeenCalledWith(mrng, biasFactor);
+            expect(shrinkA).toHaveBeenCalledWith(vA, cA);
+            expect(shrinkA).toHaveBeenCalledWith(vAB, cAB);
+            expect(canShrinkWithoutContextA).not.toHaveBeenCalled();
+            expect(generateB).not.toHaveBeenCalled();
+            expect(shrinkB).not.toHaveBeenCalled();
+            expect(canShrinkWithoutContextB).not.toHaveBeenCalled();
+          }
+        )
+      );
+    });
+
+    it('should only use the second arbitrary for values coming without any context', () => {
+      fc.assert(
+        fc.property(
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          (vA, vAA, cAA, vAB, cAB) => {
+            // Arrange
+            const {
+              instance: generatorArbitrary,
+              generate: generateA,
+              shrink: shrinkA,
+              canShrinkWithoutContext: canShrinkWithoutContextA,
+            } = fakeNextArbitrary();
+            const {
+              instance: shrinkerArbitrary,
+              generate: generateB,
+              shrink: shrinkB,
+              canShrinkWithoutContext: canShrinkWithoutContextB,
+            } = fakeNextArbitrary();
+            shrinkB.mockReturnValueOnce(Stream.of(new NextValue(vAA, cAA), new NextValue(vAB, cAB)));
+
+            // Act
+            const arb = new WithShrinkFromOtherArbitrary(generatorArbitrary, shrinkerArbitrary);
+            const shrinks = [...arb.shrink(vA, undefined)];
+
+            // Assert
+            expect(shrinks).toHaveLength(2);
+            expect(shrinks[0].value).toBe(vAA);
+            expect(shrinks[1].value).toBe(vAB);
+            expect(generateA).not.toHaveBeenCalled();
+            expect(shrinkA).not.toHaveBeenCalled();
+            expect(canShrinkWithoutContextA).not.toHaveBeenCalled();
+            expect(generateB).not.toHaveBeenCalled();
+            expect(shrinkB).toHaveBeenCalledWith(vA, undefined);
+            expect(canShrinkWithoutContextB).not.toHaveBeenCalled();
+          }
+        )
+      );
+    });
+
+    it('should only use the second arbitrary for values shrunk by it (coming with the context)', () => {
+      fc.assert(
+        fc.property(
+          fc.option(fc.integer({ min: 2 }), { nil: undefined }),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          fc.anything(),
+          (biasFactor, vA, vAA, cAA, vAB, cAB, vAC, cAC, vABA, cABA) => {
+            // Arrange
+            const {
+              instance: generatorArbitrary,
+              generate: generateA,
+              shrink: shrinkA,
+              canShrinkWithoutContext: canShrinkWithoutContextA,
+            } = fakeNextArbitrary();
+            const {
+              instance: shrinkerArbitrary,
+              generate: generateB,
+              shrink: shrinkB,
+              canShrinkWithoutContext: canShrinkWithoutContextB,
+            } = fakeNextArbitrary();
+            shrinkB.mockReturnValueOnce(
+              Stream.of(new NextValue(vAA, cAA), new NextValue(vAB, cAB), new NextValue(vAC, cAC))
+            );
+            shrinkB.mockReturnValueOnce(Stream.of(new NextValue(vABA, cABA)));
+
+            // Act
+            const arb = new WithShrinkFromOtherArbitrary(generatorArbitrary, shrinkerArbitrary);
+            const g2 = [...arb.shrink(vA, undefined)][1];
+            const shrinks = [...arb.shrink(g2.value, g2.context)];
+
+            // Assert
+            expect(shrinks).toHaveLength(1);
+            expect(shrinks[0].value).toBe(vABA);
+            expect(generateA).not.toHaveBeenCalled();
+            expect(shrinkA).not.toHaveBeenCalled();
+            expect(canShrinkWithoutContextA).not.toHaveBeenCalled();
+            expect(generateB).not.toHaveBeenCalled();
+            expect(shrinkB).toHaveBeenCalledWith(vA, undefined);
+            expect(shrinkB).toHaveBeenCalledWith(vAB, cAB);
+            expect(canShrinkWithoutContextB).not.toHaveBeenCalled();
+          }
+        )
+      );
+    });
+  });
+});
diff --git a/test/unit/arbitrary/_internals/helpers/StrictlyEqualSet.spec.ts b/test/unit/arbitrary/_internals/helpers/StrictlyEqualSet.spec.ts
index 08614e23..326fba9f 100644
--- a/test/unit/arbitrary/_internals/helpers/StrictlyEqualSet.spec.ts
+++ b/test/unit/arbitrary/_internals/helpers/StrictlyEqualSet.spec.ts
@@ -109,9 +109,26 @@ describe('StrictyEqualSet', () => {
         for (let i = 1; i < data.length; ++i) {
           const indexPrevious = rawItems.findIndex((item) => isStrictlyEqual(item, data[i - 1]));
           const indexCurrent = rawItems.findIndex((item) => isStrictlyEqual(item, data[i]));
-          expect(indexPrevious).not.toBe(-1);
-          expect(indexCurrent).not.toBe(-1);
-          expect(indexPrevious).toBeLessThan(indexCurrent);
+          if (Number.isNaN(data[i - 1])) {
+            expect(indexPrevious).toBe(-1);
+            if (Number.isNaN(data[i])) {
+              expect(indexCurrent).toBe(-1);
+              // Expect at least 2 NaN in source
+              expect(rawItems.filter((item) => Number.isNaN(item)).length).toBeGreaterThanOrEqual(2);
+            } else {
+              // One of the items before current must be a NaN
+              expect(rawItems.slice(0, indexCurrent).some((item) => Number.isNaN(item))).toBe(true);
+            }
+          } else if (Number.isNaN(data[i])) {
+            expect(indexPrevious).not.toBe(-1);
+            expect(indexCurrent).toBe(-1);
+            // One of the items after previous must be a NaN
+            expect(rawItems.slice(indexPrevious + 1).some((item) => Number.isNaN(item))).toBe(true);
+          } else {
+            expect(indexPrevious).not.toBe(-1);
+            expect(indexCurrent).not.toBe(-1);
+            expect(indexPrevious).toBeLessThan(indexCurrent);
+          }
         }
       })
     );
diff --git a/test/unit/arbitrary/ipV6.spec.ts b/test/unit/arbitrary/ipV6.spec.ts
index cf84cddc..90253904 100644
--- a/test/unit/arbitrary/ipV6.spec.ts
+++ b/test/unit/arbitrary/ipV6.spec.ts
@@ -7,6 +7,7 @@ import {
   assertShrinkProducesSameValueWithoutInitialContext,
   assertProduceCorrectValues,
   assertProduceSameValueGivenSameSeed,
+  assertGenerateIndependentOfSize,
 } from './__test-helpers__/NextArbitraryAssertions';
 import { buildNextShrinkTree, renderTree } from './__test-helpers__/ShrinkTree';
 
@@ -70,6 +71,10 @@ describe('ipV6 (integration)', () => {
     assertShrinkProducesSameValueWithoutInitialContext(ipV6Builder);
   });
 
+  it('should be independent of global settings overriding defaults on size', () => {
+    assertGenerateIndependentOfSize(ipV6Builder);
+  });
+
   it.each`
     source
     ${'::1'}
diff --git a/test/unit/arbitrary/sparseArray.spec.ts b/test/unit/arbitrary/sparseArray.spec.ts
index fec38513..b7afc4f6 100644
--- a/test/unit/arbitrary/sparseArray.spec.ts
+++ b/test/unit/arbitrary/sparseArray.spec.ts
@@ -9,7 +9,7 @@ import {
   fakeNextArbitraryStaticValue,
 } from './__test-helpers__/NextArbitraryHelpers';
 
-import * as NatMock from '../../../src/arbitrary/nat';
+import * as RestrictedIntegerArbitraryBuilderMock from '../../../src/arbitrary/_internals/builders/RestrictedIntegerArbitraryBuilder';
 import * as SetMock from '../../../src/arbitrary/set';
 import * as TupleMock from '../../../src/arbitrary/tuple';
 import {
@@ -19,6 +19,7 @@ import {
 } from './__test-helpers__/NextArbitraryAssertions';
 import { NextValue } from '../../../src/check/arbitrary/definition/NextValue';
 import { buildNextShrinkTree, renderTree } from './__test-helpers__/ShrinkTree';
+import { MaxLengthUpperBound } from '../../../src/arbitrary/_internals/helpers/MaxLengthFromMinLength';
 
 function beforeEachHook() {
   jest.resetModules();
@@ -57,14 +58,17 @@ describe('sparseArray', () => {
     );
   });
 
-  it('should always pass a not too large maxLength to set given the length we expect at the end', () => {
+  it('should always pass a not too large maxLength or with a size to set given the length we expect at the end', () => {
     fc.assert(
       fc.property(fc.option(validSparseArrayConstraints(), { nil: undefined }), (ct) => {
         // Arrange
         fc.pre(!isLimitNoTrailingCase(ct));
         const set = jest.spyOn(SetMock, 'set');
         const tuple = jest.spyOn(TupleMock, 'tuple');
-        const nat = jest.spyOn(NatMock, 'nat'); // called to build indexes
+        const restrictedIntegerArbitraryBuilder = jest.spyOn(
+          RestrictedIntegerArbitraryBuilderMock,
+          'restrictedIntegerArbitraryBuilder'
+        ); // called to build indexes
         const { instance: setInstance } = fakeNextArbitraryStaticValue(() => []);
         const { instance: tupleInstance } = fakeNextArbitraryStaticValue(() => []);
         set.mockReturnValueOnce(convertFromNext(setInstance));
@@ -75,9 +79,12 @@ describe('sparseArray', () => {
         sparseArray(convertFromNext(arb), ct);
 
         // Assert
-        expect(nat).toHaveBeenCalledTimes(1);
+        expect(restrictedIntegerArbitraryBuilder).toHaveBeenCalled(); // at least once
         expect(set).toHaveBeenCalledTimes(1);
-        const maxRequestedIndexes = nat.mock.calls[0][0] as number;
+        // First call is to configure items coming with data
+        const maxGeneratedIndexes = restrictedIntegerArbitraryBuilder.mock.calls[0][1]; // ie maxGenerated
+        const maxRequestedIndexes = restrictedIntegerArbitraryBuilder.mock.calls[0][2]; // ie max
+        expect(maxGeneratedIndexes).toBeLessThanOrEqual(maxRequestedIndexes);
         const maxRequestedLength = set.mock.calls[0][1].maxLength!;
         if (ct !== undefined && ct.noTrailingHole) {
           // maxRequestedIndexes is the maximal index we may have for the current instance (+1 is the length)
@@ -93,6 +100,16 @@ describe('sparseArray', () => {
           const maxResultingArrayLength = maxRequestedIndexes;
           expect(maxElementsToGenerateForArray).toBeLessThanOrEqual(maxResultingArrayLength);
         }
+        // Second call is only to handle the length computation in case we allow trailing holes
+        const resultedMinNumElements = ct !== undefined ? ct.minNumElements || 0 : 0;
+        const resultedMaxLength = ct !== undefined && ct.maxLength !== undefined ? ct.maxLength : MaxLengthUpperBound;
+        if (ct === undefined || (!ct.noTrailingHole && resultedMaxLength > resultedMinNumElements)) {
+          expect(restrictedIntegerArbitraryBuilder).toHaveBeenCalledTimes(2);
+          const [min, maxGenerated, max] = restrictedIntegerArbitraryBuilder.mock.calls[1];
+          expect(min).toBe(resultedMinNumElements);
+          expect(maxGenerated).toBe(maxGeneratedIndexes + 1);
+          expect(max).toBe(maxRequestedIndexes + 1);
+        }
       })
     );
   });
@@ -190,14 +207,12 @@ describe('sparseArray (integration)', () => {
   });
 
   it.each`
-    source                                                                         | constraints
-    ${['1'] /* unsupported value */}                                               | ${{}}
-    ${[1, , , , ,] /* ending by a hole not allowed */}                             | ${{ noTrailingHole: true }}
-    ${[, , , , , 3, , , , , , , , , , 6] /* not enough non-holey items */}         | ${{ minNumElements: 3 }}
-    ${[, , , , , 3, 4, , , 5, , , , , , 6] /* too many non-holey items */}         | ${{ maxNumElements: 3 }}
-    ${[, , , 4] /* too long (length is 4) */}                                      | ${{ maxLength: 3 }}
-    ${Object.assign(Array(200), { 1: 7 }) /* TODO(size) - too long */}             | ${{}}
-    ${[...Array(50)].map((_, i) => i) /* TODO(size) - too many non-holey items */} | ${{}}
+    source                                                                 | constraints
+    ${['1'] /* unsupported value */}                                       | ${{}}
+    ${[1, , , , ,] /* ending by a hole not allowed */}                     | ${{ noTrailingHole: true }}
+    ${[, , , , , 3, , , , , , , , , , 6] /* not enough non-holey items */} | ${{ minNumElements: 3 }}
+    ${[, , , , , 3, 4, , , 5, , , , , , 6] /* too many non-holey items */} | ${{ maxNumElements: 3 }}
+    ${[, , , 4] /* too long (length is 4) */}                              | ${{ maxLength: 3 }}
   `('should not be able to generate $source with fc.sparseArray(..., $constraints)', ({ source, constraints }) => {
     // Arrange / Act
     const arb = convertToNext(sparseArray(convertFromNext(new FakeIntegerArbitrary()), constraints));
@@ -208,11 +223,13 @@ describe('sparseArray (integration)', () => {
   });
 
   it.each`
-    rawValue                                | constraints
-    ${[1, , , , ,]}                         | ${{ noTrailingHole: false }}
-    ${[, , , , , 3, , , , , , , , , , 6]}   | ${{ minNumElements: 2 }}
-    ${[, , , , , 3, 4, , , 5, , , , , , 6]} | ${{ maxNumElements: 4 }}
-    ${[, , , 4]}                            | ${{ maxLength: 4 }}
+    rawValue                                                                                                          | constraints
+    ${[1, , , , ,]}                                                                                                   | ${{ noTrailingHole: false }}
+    ${[, , , , , 3, , , , , , , , , , 6]}                                                                             | ${{ minNumElements: 2 }}
+    ${[, , , , , 3, 4, , , 5, , , , , , 6]}                                                                           | ${{ maxNumElements: 4 }}
+    ${[, , , 4]}                                                                                                      | ${{ maxLength: 4 }}
+    ${Object.assign(Array(200), { 1: 7 }) /* length longer than default maxGeneratedLength but ok for shrink */}      | ${{}}
+    ${[...Array(50)].map((_, i) => i) /* non-holey items higher than default maxGeneratedLength but ok for shrink */} | ${{}}
   `('should be able to shrink $rawValue with fc.sparseArray(..., $constraints)', ({ rawValue, constraints }) => {
     // Arrange
     const arb = convertToNext(sparseArray(convertFromNext(new FakeIntegerArbitrary()), constraints));