{"_id":"@artkravchenko/fast-check","_rev":"2-50f3c661a88d17ad3df0f69ea9cf6f1c","name":"@artkravchenko/fast-check","dist-tags":{"latest":"2.3.0-SNAPSHOT.2"},"versions":{"2.3.0-SNAPSHOT.1":{"name":"@artkravchenko/fast-check","version":"2.3.0-SNAPSHOT.1","description":"Property based testing framework for JavaScript (like QuickCheck)","type":"commonjs","main":"lib/fast-check.js","exports":{".":{"require":"./lib/fast-check.js","default":"./lib/esm/fast-check.js"}},"module":"lib/esm/fast-check.js","types":"lib/types/fast-check.d.ts","sideEffects":false,"runkitExampleFilename":"runkit.cjs","scripts":{"perf":"node perf/benchmark.js","profile":"node --prof --no-logfile-per-isolate --trace-deopt --trace-opt-verbose perf/profiler.js > deopt.out && node --prof-process v8.log > v8.out","prebuild":"node prebuild/prebuild.cjs","build":"tsc","build:watch":"tsc -w","build:publish-types":"tsc -p tsconfig.publish.types.json","build:publish-cjs":"tsc -p tsconfig.publish.json","build:publish-esm":"tsc -p tsconfig.publish.json --module es2015 --moduleResolution node --outDir lib/esm && cp package.esm-template.json lib/esm/package.json","build:prod":"yarn prebuild && yarn build:publish-cjs && yarn build:publish-esm && yarn build:publish-types && node postbuild/main.cjs","watch":"tsc -w","test":"jest --config jest.unit.config.cjs --coverage","test:watch":"jest --config jest.unit.config.cjs --watch","e2e":"jest --config jest.e2e.config.cjs","e2e:watch":"jest --config jest.e2e.config.cjs --watch","update:examples":"cross-env UPDATE_CODE_SNIPPETS=true jest --config jest.examples.config.cjs","test:rollup-esm":"rollup --config test/rollup/esm/rollup.config.js && node test/rollup/esm/dist/main.js","coverage":"cat ./coverage/lcov.info | coveralls","docs":"api-extractor run --local && rm docs/fast-check.api.json && typedoc --out docs src","docs:serve":"npx serve docs/","format":"prettier --write \"**/*.{js,ts}\"","format:check":"prettier --list-different \"**/*.{js,ts}\"","lint":"eslint \"**/*.{js,ts}\" --fix","lint:check":"eslint \"**/*.{js,ts}\""},"repository":{"type":"git","url":"git+https://github.com/artkravchenko/fast-check.git"},"author":{"name":"Nicolas DUBIEN","email":"github@dubien.org"},"license":"MIT","bugs":{"url":"https://github.com/artkravchenko/fast-check/issues"},"homepage":"https://github.com/artkravchenko/fast-check#readme","engines":{"node":">=8.0.0"},"dependencies":{"pure-rand":"^3.0.0"},"devDependencies":{"@microsoft/api-extractor":"^7.9.10","@types/jest":"^26.0.4","@types/node":"^14.0.11","@typescript-eslint/eslint-plugin":"^3.1.0","@typescript-eslint/parser":"^3.1.0","benchmark":"^2.1.4","coveralls":"^3.1.0","cross-env":"^7.0.2","eslint":"^7.1.0","eslint-config-prettier":"^6.11.0","jest":"^26.1.0","mkdirp":"^1.0.4","prettier":"2.1.2","replace-in-file":"^6.0.0","rollup":"^2.13.1","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","source-map-support":"^0.5.19","ts-jest":"^26.2.0","tslint-config-prettier":"^1.18.0","typedoc":"^0.19.0","typescript":"^4.0.2"},"keywords":["property-based testing","end-to-end testing","unit testing","testing","quickcheck","jscheck","jsverify"],"tsd":{"directory":"test/type"},"funding":{"type":"opencollective","url":"https://opencollective.com/fast-check"},"licenseText":"MIT License\n\nCopyright (c) 2017 Nicolas DUBIEN\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@artkravchenko/fast-check@2.3.0-SNAPSHOT.1","dist":{"shasum":"a71ceb11204258fb3535dfa96be57fb41ecdcec0","integrity":"sha512-g4EA7WQnokGkancUl1CGQ4fN6Sc8FzOYq1lny/N7WVTj2JWpp4x4Nvkhov01ES0b1xoPSSHmaGYUmm2EcAQn1w==","tarball":"https://registry.npmjs.org/@artkravchenko/fast-check/-/fast-check-2.3.0-SNAPSHOT.1.tgz","fileCount":307,"unpackedSize":977504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcF84CRA9TVsSAnZWagAA9NIP/AokqDLHI4I/i2jX9635\nu7w74A0dnfbbwKkV07U6PdKwNMuBqLRcnR06Mi3lxyg/KOFLcAKOovojWuah\nZJvVZXjDJMDopTOZk61pyfebniEeOHrNCq2WJUXE39vrqMGvCtx/9BAo1E7l\nhXGAav9WDkBDjald5sOZJq8lxFAo7zOCnSxZz9+jWDy3Qe1LU7f1iMbzY3Od\njw7nEC2BTleS1nX2Wapwwaj71Ykfa+xiAJX4lHTQTgmGF4YtQd0u2/8hI+aU\nzyO0HhLQW5G8sUiWiodF3QnVFWkRGNhuH5MYPjq+5Nki997CaFUNU4/t+drm\nSiOxlp70/fgIHoGlaRhTYjSA4DkZM6oRWJjozgFlPJy4+Q6a0p/vyz9e9cBa\nyifu+ADVCHSFa5op/P9RRTusBY3F3BTbeh9bwn4GYcZHMFh78rNGviAsvL1M\nsrgKJuuv9QysJksJJOxSO96zieFn1e4irqhiX6HlU9fYfvjKCSG6XGKQPDoP\nAKf9AVU7A6cVe1FEM+PJw18golTdQ8r1+HxanjQS7RNgpdgziKgcPMnv5GBo\nR8Q6lhDSI9K6FHdctdBRjCemBOHHxuCCTB0NkLq+y/5mHDTjfYhxbdF1Q7+X\nUF7OD9fOWllTPu/LanP7lq/ZNMMvCGXgbWocrkCNDw7aA2nbzxjGqNTOKhIP\n5Pep\r\n=OiXC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDc3FGTff6YbZZUvjhqnT+R41vXNxY5RZ9i7SPKzPL4sgIgdPTdUgiUjoQTH2Utcw+XvS3PwGAYhXac17gUlxP4gOU="}]},"maintainers":[{"name":"oopscurity","email":"kravchenkofirst@gmail.com"}],"_npmUser":{"name":"oopscurity","email":"kravchenkofirst@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fast-check_2.3.0-SNAPSHOT.1_1601199928089_0.9271708873151312"},"_hasShrinkwrap":false},"2.3.0-SNAPSHOT.2":{"name":"@artkravchenko/fast-check","version":"2.3.0-SNAPSHOT.2","description":"Property based testing framework for JavaScript (like QuickCheck)","type":"commonjs","main":"lib/fast-check.js","exports":{".":{"require":"./lib/fast-check.js","default":"./lib/esm/fast-check.js"}},"module":"lib/esm/fast-check.js","types":"lib/types/fast-check.d.ts","sideEffects":false,"runkitExampleFilename":"runkit.cjs","scripts":{"perf":"node perf/benchmark.js","profile":"node --prof --no-logfile-per-isolate --trace-deopt --trace-opt-verbose perf/profiler.js > deopt.out && node --prof-process v8.log > v8.out","prebuild":"node prebuild/prebuild.cjs","build":"tsc","build:watch":"tsc -w","build:publish-types":"tsc -p tsconfig.publish.types.json","build:publish-cjs":"tsc -p tsconfig.publish.json","build:publish-esm":"tsc -p tsconfig.publish.json --module es2015 --moduleResolution node --outDir lib/esm && cp package.esm-template.json lib/esm/package.json","build:prod":"yarn prebuild && yarn build:publish-cjs && yarn build:publish-esm && yarn build:publish-types && node postbuild/main.cjs","watch":"tsc -w","test":"jest --config jest.unit.config.cjs --coverage","test:watch":"jest --config jest.unit.config.cjs --watch","e2e":"jest --config jest.e2e.config.cjs","e2e:watch":"jest --config jest.e2e.config.cjs --watch","update:examples":"cross-env UPDATE_CODE_SNIPPETS=true jest --config jest.examples.config.cjs","test:rollup-esm":"rollup --config test/rollup/esm/rollup.config.js && node test/rollup/esm/dist/main.js","coverage":"cat ./coverage/lcov.info | coveralls","docs":"api-extractor run --local && rm docs/fast-check.api.json && typedoc --out docs src","docs:serve":"npx serve docs/","format":"prettier --write \"**/*.{js,ts}\"","format:check":"prettier --list-different \"**/*.{js,ts}\"","lint":"eslint \"**/*.{js,ts}\" --fix","lint:check":"eslint \"**/*.{js,ts}\""},"repository":{"type":"git","url":"git+https://github.com/artkravchenko/fast-check.git"},"author":{"name":"Nicolas DUBIEN","email":"github@dubien.org"},"license":"MIT","bugs":{"url":"https://github.com/artkravchenko/fast-check/issues"},"homepage":"https://github.com/artkravchenko/fast-check#readme","engines":{"node":">=8.0.0"},"dependencies":{"pure-rand":"^3.0.0"},"devDependencies":{"@microsoft/api-extractor":"^7.9.10","@types/jest":"^26.0.4","@types/node":"^14.0.11","@typescript-eslint/eslint-plugin":"^3.1.0","@typescript-eslint/parser":"^3.1.0","benchmark":"^2.1.4","coveralls":"^3.1.0","cross-env":"^7.0.2","eslint":"^7.1.0","eslint-config-prettier":"^6.11.0","jest":"^26.1.0","mkdirp":"^1.0.4","prettier":"2.1.2","replace-in-file":"^6.0.0","rollup":"^2.13.1","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","source-map-support":"^0.5.19","ts-jest":"^26.2.0","tslint-config-prettier":"^1.18.0","typedoc":"^0.19.0","typescript":"^4.0.2"},"keywords":["property-based testing","end-to-end testing","unit testing","testing","quickcheck","jscheck","jsverify"],"tsd":{"directory":"test/type"},"funding":{"type":"opencollective","url":"https://opencollective.com/fast-check"},"licenseText":"MIT License\n\nCopyright (c) 2017 Nicolas DUBIEN\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"@artkravchenko/fast-check@2.3.0-SNAPSHOT.2","dist":{"shasum":"a923b966687f0c23c70d5405694ee71b268d0a62","integrity":"sha512-nlESY10lpyLewOjopu5uwgOmUUjfuRkw7xae6DwN+wHHTbDpYffFCGO2INzKu/vjQBMTUXxUud9DeVWtQ/Ko+Q==","tarball":"https://registry.npmjs.org/@artkravchenko/fast-check/-/fast-check-2.3.0-SNAPSHOT.2.tgz","fileCount":532,"unpackedSize":1223035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcGHuCRA9TVsSAnZWagAAJp4P/24916uT8HETJxgU+WqW\nVrevUzsi3FHTIGEAJhz8YfP+stOgbKYgE7dt4C5H1BUYWK8EWad6mqqZkpb/\np5HdMTCoQsQdVB1Mq9NYpq7IHrH2fPDU/bampx8dAKWbs1wfvY4TLTU+kO+2\nLmstzWS1zGX1f2iYInEzAYUE/u39fkzfXpU6QaQ80aKzIkHNu9yHe0JUW9EJ\n8bdcv1Wr/fs5WT03mSX04/OObmHEP/jQsG6z4Dd4Iw1HmbwA2MF32nTL7aQZ\nKlHG+Tolq18vIvgc7a74clqdmbdSAySo+W0T0/rDWqa0xFrpme7EWbW5HF/h\naaLgqmwTiYjHdyuuGgxYXjiwI0tdnAU3PzyG+QSpsI96Ivu2PVXRelg4TPg1\n6AOuHUm0AZO9iuY1fMKjD8zSBQ5eDeK1NRV/f7qgu67R9cP7ZRwU5tc3xxWR\ndOaGoFvBae4ToMwA9BfwZPRrhtsMk9jaApLJLRjbqyvhPvOgWYtBuEIlf2Ry\n0fuuhVC5daZSQojbVJs3VlZm1ln8UU4BQYsDgTtw1KeKrAx8F2X9Vul+b6eU\nma6o/lK9xyeENBhj16XUmIyVLM3zUDktBibYuWhVTzEf105gT4w/S5eQu3Qy\n4Ibx+m5a3Fhx+CzUCRwuyX4YXkYTw2qWW+rxwBI4gOzc/qSw0cKqn4oZUHyw\niJcO\r\n=Xy2i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDS/ojTWERcviYXC1tYRKTZcdRyLveKaJ0k25pszJyw7wIhANXDeKucm3uBHcr0rmwpiEF3l49ZOL8VJMoBYKLiGfvV"}]},"maintainers":[{"name":"oopscurity","email":"kravchenkofirst@gmail.com"}],"_npmUser":{"name":"oopscurity","email":"kravchenkofirst@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fast-check_2.3.0-SNAPSHOT.2_1601200622224_0.9625042471738541"},"_hasShrinkwrap":false}},"time":{"created":"2020-09-27T09:45:27.887Z","2.3.0-SNAPSHOT.1":"2020-09-27T09:45:28.306Z","modified":"2022-04-04T15:39:30.880Z","2.3.0-SNAPSHOT.2":"2020-09-27T09:57:02.515Z"},"maintainers":[{"name":"oopscurity","email":"kravchenkofirst@gmail.com"}],"description":"Property based testing framework for JavaScript (like QuickCheck)","homepage":"https://github.com/artkravchenko/fast-check#readme","keywords":["property-based testing","end-to-end testing","unit testing","testing","quickcheck","jscheck","jsverify"],"repository":{"type":"git","url":"git+https://github.com/artkravchenko/fast-check.git"},"author":{"name":"Nicolas DUBIEN","email":"github@dubien.org"},"bugs":{"url":"https://github.com/artkravchenko/fast-check/issues"},"license":"MIT","readme":"<h3 align=\"center\">\n  <img align=\"center\" src=\"https://raw.githubusercontent.com/dubzzz/fast-check/master/logo/logo.png\" alt=\"fast-check logo\" />\n</h3>\n\n<p align=\"center\">\nProperty based testing framework for JavaScript/TypeScript\n</p>\n\n<p align=\"center\">\n  <a href=\"https://travis-ci.com/dubzzz/fast-check\"><img src=\"https://travis-ci.com/dubzzz/fast-check.svg?branch=master\" alt=\"Build Status\" /></a>\n  <a href=\"https://badge.fury.io/js/fast-check\"><img src=\"https://badge.fury.io/js/fast-check.svg\" alt=\"npm version\" /></a>\n  <a href=\"https://www.npmjs.com/package/fast-check\"><img src=\"https://img.shields.io/npm/dm/fast-check\" alt=\"monthly downloads\" /></a>\n  <a href=\"https://dubzzz.github.io/fast-check/\"><img src=\"https://img.shields.io/badge/-API Reference-%23282ea9.svg\" title=\"API Reference\" /></a>\n</p>\n<p align=\"center\">\n  <a href=\"https://coveralls.io/github/dubzzz/fast-check\"><img src=\"https://coveralls.io/repos/github/dubzzz/fast-check/badge.svg\" alt=\"Coverage Status\" /></a>\n  <a href=\"https://david-dm.org/dubzzz/fast-check\"><img src=\"https://david-dm.org/dubzzz/fast-check/status.svg\" alt=\"dependencies Status\" /></a>\n  <a href=\"https://david-dm.org/dubzzz/fast-check?type=dev\"><img src=\"https://david-dm.org/dubzzz/fast-check/dev-status.svg\" alt=\"devDependencies Status\" /></a>\n</p>\n<p align=\"center\">\n  <a href=\"https://github.com/dubzzz/fast-check/labels/good%20first%20issue\"><img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\" alt=\"PRs Welcome\" /></a>\n  <a href=\"https://github.com/dubzzz/fast-check/blob/master/LICENSE\"><img src=\"https://img.shields.io/npm/l/fast-check.svg\" alt=\"License\" /></a>\n  <a href=\"https://twitter.com/intent/tweet?text=Check%20out%20fast-check%20by%20%40ndubien%20https%3A%2F%2Fgithub.com%2Fdubzzz%2Ffast-check%20%F0%9F%91%8D\"><img src=\"https://img.shields.io/twitter/url/https/github.com/dubzzz/fast-check.svg?style=social\" alt=\"Twitter\" /></a>\n</p>\n\n## Getting started\n\nHands-on tutorial and definition of Property Based Testing: [🏁 see tutorial](https://github.com/dubzzz/fast-check/blob/master/documentation/HandsOnPropertyBased.md). Or directly try it online on our pre-configured [CodeSandbox](https://codesandbox.io/s/github/dubzzz/fast-check/tree/master/example?previewwindow=tests).\n\nProperty based testing frameworks check the truthfulness of properties. A property is a statement like: *for all (x, y, ...) such as precondition(x, y, ...) holds property(x, y, ...) is true*.\n\nInstall the module with: `yarn add fast-check --dev` or `npm install fast-check --save-dev`\n\nExample of integration in [mocha](http://mochajs.org/):\n\n```js\nconst fc = require('fast-check');\n\n// Code under test\nconst contains = (text, pattern) => text.indexOf(pattern) >= 0;\n\n// Properties\ndescribe('properties', () => {\n\t// string text always contains itself\n\tit('should always contain itself', () => {\n\t\tfc.assert(fc.property(fc.string(), text => contains(text, text)));\n\t});\n\t// string a + b + c always contains b, whatever the values of a, b and c\n\tit('should always contain its substrings', () => {\n\t\tfc.assert(fc.property(fc.string(), fc.string(), fc.string(), (a,b,c) => {\n\t\t\t// Alternatively: no return statement and direct usage of expect or assert\n\t\t\treturn contains(a+b+c, b);\n\t\t}));\n\t});\n});\n```\n\nIn case of failure, the test raises a red flag. Its output should help you to diagnose what went wrong in your implementation. Example with a failing implementation of contain:\n\n```\n1) should always contain its substrings\n    Error: Property failed after 1 tests (seed: 1527422598337, path: 0:0): [\"\",\"\",\"\"]\n    Shrunk 1 time(s)\n    Got error: Property failed by returning false\n\n    Hint: Enable verbose mode in order to have the list of all failing values encountered during the run\n```\n\nIntegration with other test frameworks: [ava](https://github.com/dubzzz/fast-check-examples/blob/master/test-ava/example.spec.js), [jasmine](https://github.com/dubzzz/fast-check-examples/blob/master/test-jasmine/example.spec.js), [jest](https://github.com/dubzzz/fast-check-examples/blob/master/test-jest/example.spec.js), [mocha](https://github.com/dubzzz/fast-check-examples/blob/master/test/longest%20common%20substr/test.js) and [tape](https://github.com/dubzzz/fast-check-examples/blob/master/test-tape/example.spec.js).\n\nMore examples: [simple examples](https://github.com/dubzzz/fast-check/tree/master/example), [fuzzing](https://github.com/dubzzz/fuzz-rest-api) and [against various algorithms](https://github.com/dubzzz/fast-check-examples).\n\nUseful documentations:\n- [🏁 Introduction to Property Based & Hands On](https://github.com/dubzzz/fast-check/blob/master/documentation/HandsOnPropertyBased.md)\n- [🐣 Built-in arbitraries](https://github.com/dubzzz/fast-check/blob/master/documentation/Arbitraries.md)\n- [🔧 Custom arbitraries](https://github.com/dubzzz/fast-check/blob/master/documentation/AdvancedArbitraries.md)\n- [🏃‍♂️ Property based runners](https://github.com/dubzzz/fast-check/blob/master/documentation/Runners.md)\n- [💥 Tips](https://github.com/dubzzz/fast-check/blob/master/documentation/Tips.md)\n- [🔌 API Reference](https://dubzzz.github.io/fast-check/)\n- [⭐ Awesome fast-check](https://github.com/dubzzz/awesome-fast-check)\n- [🤯 How fast-check works?](https://github.com/dubzzz/fast-check/blob/master/documentation/HowItWorks.md)\n\n## Why should I migrate to fast-check?\n\nfast-check has initially been designed in an attempt to cope with limitations I encountered while using other property based testing frameworks designed for JavaScript:\n\n- **Types:** strong and up-to-date types - *thanks to TypeScript*\n- **Extendable:** easy `map` method to derive existing arbitraries while keeping shrink \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/AdvancedArbitraries.md#transform-values)\\] - *some frameworks ask the user to provide both a->b and b->a mappings in order to keep a shrinker*\n- **Extendable:** kind of flatMap-operation called `chain` \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/AdvancedArbitraries.md#transform-arbitraries)\\] - *able to bind the output of an arbitrary as input of another one while keeping the shrink working*\n- **Extendable:** precondition checks with `fc.pre(...)` \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/Tips.md#filter-invalid-combinations-using-pre-conditions)\\] - *filtering invalid entries can be done directly inside the check function if needed*\n- **Smart:** ability to shrink on `fc.oneof` \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/Arbitraries.md#combinors-of-arbitraries-t)\\] - *surprisingly some frameworks don't*\n- **Smart:** biased by default \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/AdvancedArbitraries.md#biased-arbitraries)\\] - *by default it generates both small and large values, making it easier to dig into counterexamples without having to tweak a size parameter manually*\n- **Debug:** verbose mode \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/Tips.md#opt-for-verbose-failures)\\] - *easier troubleshooting with verbose mode enabled*\n- **Debug:** replay directly on the minimal counterexample \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/Tips.md#replay-after-failure)\\] - *no need to replay the whole sequence, you get directly the counterexample*\n- **Debug:** custom examples in addition of generated ones \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/Tips.md#add-custom-examples-next-to-generated-ones)\\] - *no need to duplicate the code to play the property on custom examples*\n- **Debug:** logger per predicate run \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/Tips.md#log-within-a-predicate)\\] - *simplify your troubleshoot with fc.context and its logging feature*\n- **Unique:** model based approach \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/Tips.md#model-based-testing-or-ui-test)\\]\\[[article](https://medium.com/criteo-labs/detecting-the-unexpected-in-web-ui-fuzzing-1f3822c8a3a5)\\] - *use the power of property based testing to test UI, APIs or state machines*\n- **Unique:** detect race conditions in your code \\[[more](https://github.com/dubzzz/fast-check/blob/master/documentation/Tips.md#detect-race-conditions)\\] - *shuffle the way your promises and async calls resolve using the power of property based testing to detect races*\n\nFor more details, refer to the documentation in the links above.\n\n## Compatibility\n\nHere are the minimal requirements to use fast-check properly without any polyfills:\n\n| fast-check | node                | ECMAScript version | _TypeScript (optional)_ |\n|------------|---------------------|--------------------|-------------------------|\n| **2.x**    | ≥8<sup>(1)</sup>    | ES2017             | ≥3.2                    |\n| **1.x**    | ≥0.12<sup>(1)</sup> | ES3                | ≥3.0                    |\n\n(1) Except for features that cannot be polyfilled - such as `bigint`-related ones - all the capabilities of fast-check should be usable given you use at least the minimal recommended version of node associated to your major of fast-check.\n\n## Issues found by fast-check in famous packages\n\nfast-check has been able to find some unexpected behaviour among famous npm packages. Here are some of the errors detected using fast-check:\n\n### [jest](https://github.com/facebook/jest/)\n\n**Issue detected:** `toStrictEqual` fails to distinguish 0 from 5e-324 \\[[more](https://github.com/facebook/jest/issues/7941)\\]\n\n**Code example:** `expect(0).toStrictEqual(5e-324)` succeeds\n\n### [js-yaml](https://github.com/nodeca/js-yaml/)\n\n**Issue detected:** enabling `!!int: binary` style when dumping negative integers produces invalid content \\[[more](https://github.com/nodeca/js-yaml/pull/398)\\]\n\n**Code example:** `yaml.dump({toto: -10}, {styles:{'!!int':'binary'}})` produces `toto: 0b-1010` not `toto: -0b1010`\n\n### [query-string](https://github.com/sindresorhus/query-string)\n\n**Issue detected:** enabling the `bracket` setting when exporting arrays containing null values produces an invalid output for the parser \\[[more](https://github.com/sindresorhus/query-string/pull/138)\\]\n\n**Code example:**\n```js\nm.stringify({bar: ['a', null, 'b']}, {arrayFormat: 'bracket'}) //=> \"bar[]=a&bar&bar[]=b\"\nm.parse('bar[]=a&bar&bar[]=b', {arrayFormat: 'bracket'})       //=> {bar: [null, 'b']}\n```\n\n**[MORE: Issues detected thanks of fast-check](https://github.com/dubzzz/fast-check/blob/master/documentation/IssuesDiscovered.md)**\n\n## Credits\n\n### Code Contributors\n\nThis project would not be the same without them 💖 - [Become one of them](CONTRIBUTING.md)\n\n<a href=\"https://github.com/dubzzz/fast-check/graphs/contributors\"><img src=\"https://opencollective.com/fast-check/contributors.svg?width=890&button=false\" /></a>\n\n### Backers\n\nThank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/fast-check/contribute)] and help us sustain our community.\n<a href=\"https://opencollective.com/fast-check#backers\"><img src=\"https://opencollective.com/fast-check/backers.svg?width=890\"></a>\n\n### Sponsors\n\nSupport this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/fast-check#sponsor)]\n\n<a href=\"https://opencollective.com/fast-check/sponsor/0/website\"><img src=\"https://opencollective.com/fast-check/sponsor/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/1/website\"><img src=\"https://opencollective.com/fast-check/sponsor/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/2/website\"><img src=\"https://opencollective.com/fast-check/sponsor/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/3/website\"><img src=\"https://opencollective.com/fast-check/sponsor/3/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/4/website\"><img src=\"https://opencollective.com/fast-check/sponsor/4/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/5/website\"><img src=\"https://opencollective.com/fast-check/sponsor/5/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/6/website\"><img src=\"https://opencollective.com/fast-check/sponsor/6/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/7/website\"><img src=\"https://opencollective.com/fast-check/sponsor/7/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/8/website\"><img src=\"https://opencollective.com/fast-check/sponsor/8/avatar.svg\"></a>\n<a href=\"https://opencollective.com/fast-check/sponsor/9/website\"><img src=\"https://opencollective.com/fast-check/sponsor/9/avatar.svg\"></a>\n","readmeFilename":"README.md"}