{"_id":"@creative-introvert/tons-of-tests","_rev":"15-6c270f63dbd84f2f9a8467d294d01c16","name":"@creative-introvert/tons-of-tests","dist-tags":{"latest":"1.2.0"},"versions":{"0.4.0":{"name":"@creative-introvert/tons-of-tests","version":"0.4.0","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.4.0","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"b6edd079f61e1444860897215a1857e417dfab68","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.4.0.tgz","fileCount":266,"integrity":"sha512-w2vldRYg/aQ/OxvGDwwH8AMVXjIj4iymOBn3EDsz8qzaryF6WCUqZ4C70qQgj0fKVFj7oEBEHLhgdr/9zHdaCQ==","signatures":[{"sig":"MEYCIQDHDALC808DWA81IoikQhxfsQO+5R5aNPCuSOEz3/jVPgIhALVkyV5TKKTEc5NiuKIsj65t/rHginG9wY2d7dODOTFo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":679824},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.4.0.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/fd05b5166784e8c4a1f1896452a7cca2/creative-introvert-tons-of-tests-0.4.0.tgz","_integrity":"sha512-w2vldRYg/aQ/OxvGDwwH8AMVXjIj4iymOBn3EDsz8qzaryF6WCUqZ4C70qQgj0fKVFj7oEBEHLhgdr/9zHdaCQ==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.5.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.2","dependencies":{"chalk":"4","effect":"3.1.2","@effect/sql":"^0.2.2","ansi-colors":"^4.1.3","@effect/schema":"^0.66.14","@effect/platform":"^0.53.0","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.49.0","@effect/sql-sqlite-node":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.4.0_1715686620467_0.39489448958892526","host":"s3://npm-registry-packages"}},"0.4.1":{"name":"@creative-introvert/tons-of-tests","version":"0.4.1","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.4.1","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"f03eb1104a3c5b0ec7544f94180f3efdfd50fabe","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.4.1.tgz","fileCount":266,"integrity":"sha512-zhurT8UQtam/UbiycMZOKEkg12jtkGZw30JLkSgjJGbQRJqsQH3LHH80Sh60UhSWQiQE+26Wm/rpUpD36nT1eg==","signatures":[{"sig":"MEUCIQDo+zDXqyvEILvm5v5VXsNYJGv4yi8n+BbLHw243/yG4wIgOrNN3M2L8zZGtiivaWeceAHv3yjojsVSw8vdAaLEYg8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":694236},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.4.1.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/a7f324e65d573cde3d043b30abc0b512/creative-introvert-tons-of-tests-0.4.1.tgz","_integrity":"sha512-zhurT8UQtam/UbiycMZOKEkg12jtkGZw30JLkSgjJGbQRJqsQH3LHH80Sh60UhSWQiQE+26Wm/rpUpD36nT1eg==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.5.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.2","dependencies":{"chalk":"4","effect":"3.1.5","@effect/sql":"^0.2.10","ansi-colors":"^4.1.3","@effect/schema":"^0.67.5","@effect/platform":"^0.53.8","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.49.8","@effect/sql-sqlite-node":"^0.2.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.4.1_1715895036803_0.7009904818187507","host":"s3://npm-registry-packages"}},"0.5.0":{"name":"@creative-introvert/tons-of-tests","version":"0.5.0","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.5.0","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"321d9a6b2d37bd938a9097053f51d2f05adb18b2","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.5.0.tgz","fileCount":266,"integrity":"sha512-v5UIqPLkpsWA2XGL5+thzgCQvNqdE7Jj2QrO7RlmpS2MfYzwnpI+yfXwsB/1S4ws1ChlejCTU3PrMEPdDWlTsA==","signatures":[{"sig":"MEUCIGmNAcgCgc0kFwTkCTw6QkHfUNk+uoxAqpc5WtsIiuEdAiEA8ruJrIfouTtCDqsZTGkYunFm4vuQdh/fXrctzsX9D4w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":695774},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.5.0.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/38c6330901dcab621d2a548f7e09da46/creative-introvert-tons-of-tests-0.5.0.tgz","_integrity":"sha512-v5UIqPLkpsWA2XGL5+thzgCQvNqdE7Jj2QrO7RlmpS2MfYzwnpI+yfXwsB/1S4ws1ChlejCTU3PrMEPdDWlTsA==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.5.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.2","dependencies":{"chalk":"4","effect":"3.1.5","@effect/sql":"^0.2.10","ansi-colors":"^4.1.3","@effect/schema":"^0.67.5","@effect/platform":"^0.53.8","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.49.8","@effect/sql-sqlite-node":"^0.2.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.5.0_1716382942448_0.8097218988200277","host":"s3://npm-registry-packages"}},"0.5.1":{"name":"@creative-introvert/tons-of-tests","version":"0.5.1","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.5.1","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"38972f43bcbc9a8ca05c21a11583713aed717762","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.5.1.tgz","fileCount":266,"integrity":"sha512-UhjgzcyM7nNCbTL29iPGoSOSS5jJnXNcQlsR2w9LWtWPW7OgeCDbXYdQkmASPwG8/wrnQllFGctwROwQ8Slhig==","signatures":[{"sig":"MEUCIQD+exJlK2LgRrmiscMsZrsFx3ecPpp/feWwBPr3/JplUQIgZTGO2agzh7dG/l6uWS51y2av6ge0k3MlTkYdIv6ZbR0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":695461},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.5.1.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/dc283710db47ac8318cd1c32475a242b/creative-introvert-tons-of-tests-0.5.1.tgz","_integrity":"sha512-UhjgzcyM7nNCbTL29iPGoSOSS5jJnXNcQlsR2w9LWtWPW7OgeCDbXYdQkmASPwG8/wrnQllFGctwROwQ8Slhig==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.7.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.3","dependencies":{"chalk":"4","effect":"3.2.5","@effect/sql":"^0.3.2","ansi-colors":"^4.1.3","@effect/schema":"^0.67.14","@effect/platform":"^0.55.1","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.51.1","@effect/sql-sqlite-node":"^0.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.5.1_1716967132943_0.49239264024651597","host":"s3://npm-registry-packages"}},"0.6.0":{"name":"@creative-introvert/tons-of-tests","version":"0.6.0","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.6.0","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"161c34290e9ef0833391303c3975caa26cf21f7a","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.6.0.tgz","fileCount":266,"integrity":"sha512-/79qfVSEbnqcUh1HZBrL5BOzWnQvK7TOpDe3efFOqal0TJ7UceazUl+zLYrzuWIV+VjxNOkEWHAxctkaB2xgTw==","signatures":[{"sig":"MEUCIQCeyPdSfr83kkpstKB7jwu2e3OI8hTpMJV8AY2YyIsEmgIgQE2bV2BIallegi9SNPJ5kEgw+Pf2dPaDqK9cZsppPM0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":695187},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.6.0.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/26a118c89665994b934fc7a0ac5de6dd/creative-introvert-tons-of-tests-0.6.0.tgz","_integrity":"sha512-/79qfVSEbnqcUh1HZBrL5BOzWnQvK7TOpDe3efFOqal0TJ7UceazUl+zLYrzuWIV+VjxNOkEWHAxctkaB2xgTw==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.7.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.3","dependencies":{"chalk":"^5.3.0","effect":"3.3.2","@effect/sql":"^0.3.11","ansi-colors":"^4.1.3","@effect/schema":"^0.67.23","@effect/platform":"^0.57.1","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.51.10","@effect/sql-sqlite-node":"^0.3.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.6.0_1718546492734_0.9439537947192751","host":"s3://npm-registry-packages"}},"0.7.0":{"name":"@creative-introvert/tons-of-tests","version":"0.7.0","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.7.0","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"96238851ff193dc85f808f100c20ecfc4ecaaab8","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.7.0.tgz","fileCount":266,"integrity":"sha512-ky1t514H0TLLxQjpu3NS8YPVoIgIl2R2TDzyaI77MlMrUTdbUL2dDjRX93Tl7JFaSfP9pxkSq2tUkPo+YWb1wQ==","signatures":[{"sig":"MEUCIHiAyOFyQlEJMWDn/55m+eXYM5m8G+ouRzoqT+pauhF+AiEApUzVeP1sxeuVw5AdkVz5DWgYTV+1WZzwmdb5JA3aLIA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":697825},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.7.0.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/a5128f6dcad49e5070b4a2fbab063789/creative-introvert-tons-of-tests-0.7.0.tgz","_integrity":"sha512-ky1t514H0TLLxQjpu3NS8YPVoIgIl2R2TDzyaI77MlMrUTdbUL2dDjRX93Tl7JFaSfP9pxkSq2tUkPo+YWb1wQ==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.7.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.3","dependencies":{"chalk":"^5.3.0","effect":"3.3.2","@effect/sql":"^0.3.11","ansi-colors":"^4.1.3","@effect/schema":"^0.67.23","@effect/platform":"^0.57.1","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.51.10","@effect/sql-sqlite-node":"^0.3.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.7.0_1718549157562_0.9790654915328825","host":"s3://npm-registry-packages"}},"0.7.1":{"name":"@creative-introvert/tons-of-tests","version":"0.7.1","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.7.1","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"dbfcd1931fdac2de2b62b70f2e461e7b25638dd1","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.7.1.tgz","fileCount":266,"integrity":"sha512-6OcZVN9v/QbQ9iwLruMv8ox5zCACY846EHYO08WufF8PXtqHy9qdJDIRW3YngHkIXmsPPVxnwC592z3esLrfhw==","signatures":[{"sig":"MEUCIBgDNLowhbISLLkPUBySfhP3xUAaa6Pic2y2fRCvnEJMAiEA4qMdVuN7tsK7aaN/c4gpgi0T0YMp6jpN/vhx3pH3UOU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":705788},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.7.1.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/8ae020ebcae7006676f66d05dfc50cd1/creative-introvert-tons-of-tests-0.7.1.tgz","_integrity":"sha512-6OcZVN9v/QbQ9iwLruMv8ox5zCACY846EHYO08WufF8PXtqHy9qdJDIRW3YngHkIXmsPPVxnwC592z3esLrfhw==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.7.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.3","dependencies":{"chalk":"^5.3.0","effect":"3.3.2","@effect/sql":"^0.3.11","ansi-colors":"^4.1.3","@effect/schema":"^0.67.23","@effect/platform":"^0.57.1","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.51.10","@effect/sql-sqlite-node":"^0.3.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.7.1_1718549850036_0.6821241491525278","host":"s3://npm-registry-packages"}},"0.7.2":{"name":"@creative-introvert/tons-of-tests","version":"0.7.2","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.7.2","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"7c7ebb31debb2dd4562f40da72f508f697eda83a","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.7.2.tgz","fileCount":266,"integrity":"sha512-CH6BHYt4qv7zGFdMhf/+Bq6SoFpwDc+u8PzZ//y4spNnGAog5tZ52MkgFoCBGbDFkNw5vJGf4H/i8W5cQd+oKA==","signatures":[{"sig":"MEYCIQDRdygvOFHBNYunpPSC/nsM70RMjh+q6yk8LxBgW3J0twIhAJ34hgHMwRZ6CvrZGkiZ1Qr+jy4cBhYf9apacZhrM5z9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":705787},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.7.2.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/2a75ffcf5067473acd50b4ca9dd62b44/creative-introvert-tons-of-tests-0.7.2.tgz","_integrity":"sha512-CH6BHYt4qv7zGFdMhf/+Bq6SoFpwDc+u8PzZ//y4spNnGAog5tZ52MkgFoCBGbDFkNw5vJGf4H/i8W5cQd+oKA==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.7.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.3","dependencies":{"chalk":"^5.3.0","effect":"3.3.5","@effect/sql":"^0.3.15","ansi-colors":"^4.1.3","@effect/schema":"^0.68.1","@effect/platform":"^0.57.5","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.51.14","@effect/sql-sqlite-node":"^0.3.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.7.2_1718889371184_0.9143205584367813","host":"s3://npm-registry-packages"}},"0.8.0":{"name":"@creative-introvert/tons-of-tests","version":"0.8.0","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.8.0","homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"5f782ab67ff5cecf52944566fc0ebeb80a19450b","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.8.0.tgz","fileCount":266,"integrity":"sha512-m2g95cNm/4QG58nAqK8fD02bx82KXkbBvp9Nd4b7JO7mkbt2gG+QWHgR4/02UmBGeDg46D8fDbmyb9rLRUKKcg==","signatures":[{"sig":"MEUCIQC7OXsPiSVJPrUF/M6SQgbjQi0bKLbajgmrAaaCzJLF0gIgDt1QXvUWm6oL86k/b5iogD58xdf5KpyXZVx3Sp78wsE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":706769},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.8.0.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/a30761829d5f8399e4b4929ef8f9e8eb/creative-introvert-tons-of-tests-0.8.0.tgz","_integrity":"sha512-m2g95cNm/4QG58nAqK8fD02bx82KXkbBvp9Nd4b7JO7mkbt2gG+QWHgR4/02UmBGeDg46D8fDbmyb9rLRUKKcg==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.7.0","description":"`tons-of-test`, (or `tots` for short, ) is a test runner, simlar to [Jest](https://jestjs.io/), [vitest](https://vitest.dev/) or [ava](https://github.com/avajs/ava), that focuses on testing predictive functions (e.g. search, auto-complete, or ML).","directories":{},"sideEffects":[],"_nodeVersion":"18.20.3","dependencies":{"chalk":"^5.3.0","effect":"3.3.5","@effect/sql":"^0.3.15","ansi-colors":"^4.1.3","@effect/schema":"^0.68.1","@effect/platform":"^0.57.5","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.51.14","@effect/sql-sqlite-node":"^0.3.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.8.0_1719929871767_0.675805350604743","host":"s3://npm-registry-packages"}},"0.9.0":{"name":"@creative-introvert/tons-of-tests","version":"0.9.0","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.9.0","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"9f6c98e59939268e8da1a4100c1e8c45826951e0","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.9.0.tgz","fileCount":260,"integrity":"sha512-hlsEwAmAB/L6eQyw0UbijqvqCX1pYPl0nSVRFreasKP7SO6PppXvf0OylxThKoCsMMCmNwSXpraDg7apBLUh2w==","signatures":[{"sig":"MEUCIAzYOb6wwWl8BNRbRwYOG9+90dKx22lKS6Y0yQPY27LCAiEAjBRZEUuy/NOXWZVmXAXnIGWX90Z/ptkXa1W9ZKMzdsU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":673722},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.9.0.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/65a9301918a5501be01749e921a016e2/creative-introvert-tons-of-tests-0.9.0.tgz","_integrity":"sha512-hlsEwAmAB/L6eQyw0UbijqvqCX1pYPl0nSVRFreasKP7SO6PppXvf0OylxThKoCsMMCmNwSXpraDg7apBLUh2w==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.8.2","description":"A specialized test runner for predictive functions, focusing on scenarios where 100% accuracy isn't expected or practical. Similar to Jest, vitest, or ava, but designed specifically for testing search, auto-complete, ML models, and statistical functions.","directories":{},"sideEffects":[],"_nodeVersion":"18.20.8","dependencies":{"chalk":"^5.6.0","effect":"3.17.8","@effect/sql":"^0.44.2","ansi-colors":"^4.1.3","@effect/platform":"^0.90.6","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.96.0","@effect/sql-sqlite-node":"^0.45.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.9.0_1755875645193_0.08485474189652642","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@creative-introvert/tons-of-tests","version":"0.9.1","license":"MIT","_id":"@creative-introvert/tons-of-tests@0.9.1","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"b69dd2e6dd39135f59d505cc798f473e6ca95cae","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-0.9.1.tgz","fileCount":260,"integrity":"sha512-r+bCz7v3PvO1DMjJ6s/0MbXLXdGbtifAn8E9sBwYXRNZKvB5LYYPywy9WtnXTTcmfLBOcFuDPNmK3ShTUpiVTQ==","signatures":[{"sig":"MEQCIG6TXdqqgKaboJAKUe+SjqjQIfetEZw+c1aIbR7rtqR/AiBby47mui65E7AAUJqkH39Vo5wdmQkP9wSrpXw3OyHN9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":673722},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-0.9.1.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/10d7fc2745b61ce5a21a14aa54f9358f/creative-introvert-tons-of-tests-0.9.1.tgz","_integrity":"sha512-r+bCz7v3PvO1DMjJ6s/0MbXLXdGbtifAn8E9sBwYXRNZKvB5LYYPywy9WtnXTTcmfLBOcFuDPNmK3ShTUpiVTQ==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"10.8.2","description":"A specialized test runner for predictive functions, focusing on scenarios where 100% accuracy isn't expected or practical. Similar to Jest, vitest, or ava, but designed specifically for testing search, auto-complete, ML models, and statistical functions.","directories":{},"sideEffects":[],"_nodeVersion":"18.20.8","dependencies":{"chalk":"^5.6.2","effect":"3.18.1","@effect/sql":"^0.46.0","ansi-colors":"^4.1.3","@effect/platform":"^0.92.1","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.98.2","@effect/sql-sqlite-node":"^0.47.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_0.9.1_1759323207371_0.7606533705490499","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@creative-introvert/tons-of-tests","version":"1.0.0","license":"MIT","_id":"@creative-introvert/tons-of-tests@1.0.0","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"672bda4961eff72c6559aded89212d1252421bcb","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-1.0.0.tgz","fileCount":284,"integrity":"sha512-qv4V6u5du7gLkxEzyx8zNeYtbzKybXr53f70EykVtetjdUJhutCeffOhQCzvHM+v916RbUQgAKbsYzmUFXGMmg==","signatures":[{"sig":"MEYCIQDjYuoPHyqZi6jmJxlRfVaqrXkLKUSEqLmnkRhL27UmCgIhAKVBPywCNRFxI1UXWjhnj78MSZhqDqcLrQAueMEWlp1O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":804227},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-1.0.0.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/e6932216e073e78316846e066249d0b1/creative-introvert-tons-of-tests-1.0.0.tgz","_integrity":"sha512-qv4V6u5du7gLkxEzyx8zNeYtbzKybXr53f70EykVtetjdUJhutCeffOhQCzvHM+v916RbUQgAKbsYzmUFXGMmg==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"11.9.0","description":"A specialized test runner for predictive functions, focusing on scenarios where 100% accuracy isn't expected or practical. Similar to Jest, vitest, or ava, but designed specifically for testing search, auto-complete, ML models, and statistical functions.","directories":{},"sideEffects":[],"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.2","effect":"3.21.2","@effect/sql":"^0.51.1","ansi-colors":"^4.1.3","@effect/platform":"^0.96.1","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.106.0","@effect/sql-sqlite-node":"^0.52.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_1.0.0_1777044483536_0.6124050052545853","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@creative-introvert/tons-of-tests","version":"1.1.0","license":"MIT","_id":"@creative-introvert/tons-of-tests@1.1.0","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"24c6b4f8f2d8743d9dcdb39ce07ebc0d68aa330e","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-1.1.0.tgz","fileCount":284,"integrity":"sha512-ajLOqE3eFOXCxt/DlOYycwfPM+V5ZaKq4U1cafgZU7SnMzqupaHVrne5GyQg61dILAK9QmtydlTvJxzxTwieCA==","signatures":[{"sig":"MEUCIQCMq3L5rqmEZE6vMYmi3Enlp6p6K1GlN+0pS8FNJfb9hwIgUWX5p8JWU62d1arFU0Nnsq/Z8RnPyMdsKl/XAKA9R+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":812193},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-1.1.0.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/316d1b2b6d8a443fe43bef4e2b0f85eb/creative-introvert-tons-of-tests-1.1.0.tgz","_integrity":"sha512-ajLOqE3eFOXCxt/DlOYycwfPM+V5ZaKq4U1cafgZU7SnMzqupaHVrne5GyQg61dILAK9QmtydlTvJxzxTwieCA==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"11.9.0","description":"A specialized test runner for predictive functions, focusing on scenarios where 100% accuracy isn't expected or practical. Similar to Jest, vitest, or ava, but designed specifically for testing search, auto-complete, ML models, and statistical functions.","directories":{},"sideEffects":[],"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.2","effect":"3.21.2","@effect/sql":"^0.51.1","ansi-colors":"^4.1.3","@effect/platform":"^0.96.1","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.106.0","@effect/sql-sqlite-node":"^0.52.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_1.1.0_1777060973168_0.6459990250298693","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@creative-introvert/tons-of-tests","version":"1.1.1","license":"MIT","_id":"@creative-introvert/tons-of-tests@1.1.1","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"dist":{"shasum":"636fb2382d48b94487aa37d90127fd2205d26ded","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-1.1.1.tgz","fileCount":284,"integrity":"sha512-yeRaiWPguQWwMnPDBT3bFmiCNhmF5FteFPox2sR4OddIsz9uJ8MlUBXOTs59M9517JiCJmzRiaCnomV3y7XdKg==","signatures":[{"sig":"MEQCIF+wgB0uumRq5K7jWelMiAw02FpIT2LWAjBayn5uVJ7AAiBypVuReLXhka6oXFJLYY9gnNZunMF4/qzYDCMFPvk47Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":813115},"main":"./dist/cjs/index.js","tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"_from":"file:creative-introvert-tons-of-tests-1.1.1.tgz","types":"./dist/dts/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"_resolved":"/tmp/c03100345376cb56eb76c2d96cba8788/creative-introvert-tons-of-tests-1.1.1.tgz","_integrity":"sha512-yeRaiWPguQWwMnPDBT3bFmiCNhmF5FteFPox2sR4OddIsz9uJ8MlUBXOTs59M9517JiCJmzRiaCnomV3y7XdKg==","repository":{"url":"git+https://github.com/creative-introvert/tons-of-tests.git","type":"git"},"_npmVersion":"11.9.0","description":"A specialized test runner for predictive functions, focusing on scenarios where 100% accuracy isn't expected or practical. Similar to Jest, vitest, or ava, but designed specifically for testing search, auto-complete, ML models, and statistical functions.","directories":{},"sideEffects":[],"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.2","effect":"3.21.2","@effect/sql":"^0.51.1","ansi-colors":"^4.1.3","@effect/platform":"^0.96.1","diff-match-patch":"^1.0.5","@effect/platform-node":"^0.106.0","@effect/sql-sqlite-node":"^0.52.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tons-of-tests_1.1.1_1777062151076_0.11645151196549164","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"dependencies":{"@effect/platform":"^0.96.1","@effect/platform-node":"^0.106.0","@effect/sql":"^0.51.1","@effect/sql-sqlite-node":"^0.52.0","ansi-colors":"^4.1.3","chalk":"^5.6.2","diff-match-patch":"^1.0.5","effect":"3.21.2"},"license":"MIT","name":"@creative-introvert/tons-of-tests","repository":{"type":"git","url":"git+https://github.com/creative-introvert/tons-of-tests.git"},"sideEffects":[],"tags":["typescript","performance","confusion-matrix","test","test-runner","coverage"],"version":"1.2.0","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/dts/index.d.ts","exports":{".":{"types":"./dist/dts/index.d.ts","import":"./dist/esm/index.js","default":"./dist/cjs/index.js"}},"publishConfig":{"access":"public"},"_id":"@creative-introvert/tons-of-tests@1.2.0","description":"A specialized test runner for predictive functions, focusing on scenarios where 100% accuracy isn't expected or practical. Similar to Jest, vitest, or ava, but designed specifically for testing search, auto-complete, ML models, and statistical functions.","bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"homepage":"https://github.com/creative-introvert/tons-of-tests#readme","_integrity":"sha512-Ahfp4/ErGWjXPZ3PAZy4tDxyDAdvd2yb7ReiBHYXeUCWQjOrk9Z2wZMgzTAOg2E97LzfUXVcKq+AodpcVw+sZg==","_resolved":"/tmp/66626e1ebe50ebe4956a185e2c3b125a/creative-introvert-tons-of-tests-1.2.0.tgz","_from":"file:creative-introvert-tons-of-tests-1.2.0.tgz","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-Ahfp4/ErGWjXPZ3PAZy4tDxyDAdvd2yb7ReiBHYXeUCWQjOrk9Z2wZMgzTAOg2E97LzfUXVcKq+AodpcVw+sZg==","shasum":"c9ff931dc7620339c95a07270b717173ff85d0ad","tarball":"https://registry.npmjs.org/@creative-introvert/tons-of-tests/-/tons-of-tests-1.2.0.tgz","fileCount":284,"unpackedSize":820144,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDMWzCU2oAGrzfY7qMa3U1/YIomg9qwfhQ4RWcD2k4voAiEAwIqmmkE//H6ALny3GDdyTp90m1Ofic3bvS3qf8ChdSY="}]},"_npmUser":{"name":"creative-introvert","email":"creative-introvert@proton.me"},"directories":{},"maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tons-of-tests_1.2.0_1777381945869_0.41759758742915487"},"_hasShrinkwrap":false}},"time":{"created":"2024-05-14T11:37:00.368Z","modified":"2026-04-28T13:12:26.126Z","0.4.0":"2024-05-14T11:37:00.685Z","0.4.1":"2024-05-16T21:30:36.955Z","0.5.0":"2024-05-22T13:02:22.640Z","0.5.1":"2024-05-29T07:18:53.147Z","0.6.0":"2024-06-16T14:01:32.882Z","0.7.0":"2024-06-16T14:45:57.815Z","0.7.1":"2024-06-16T14:57:30.258Z","0.7.2":"2024-06-20T13:16:11.327Z","0.8.0":"2024-07-02T14:17:51.937Z","0.9.0":"2025-08-22T15:14:05.386Z","0.9.1":"2025-10-01T12:53:27.545Z","1.0.0":"2026-04-24T15:28:03.849Z","1.1.0":"2026-04-24T20:02:53.331Z","1.1.1":"2026-04-24T20:22:31.228Z","1.2.0":"2026-04-28T13:12:26.030Z"},"bugs":{"url":"https://github.com/creative-introvert/tons-of-tests/issues"},"license":"MIT","homepage":"https://github.com/creative-introvert/tons-of-tests#readme","repository":{"type":"git","url":"git+https://github.com/creative-introvert/tons-of-tests.git"},"description":"A specialized test runner for predictive functions, focusing on scenarios where 100% accuracy isn't expected or practical. Similar to Jest, vitest, or ava, but designed specifically for testing search, auto-complete, ML models, and statistical functions.","maintainers":[{"name":"creative-introvert","email":"creative-introvert@proton.me"}],"readme":"# tots (tons-of-tests)\n\nA specialized test runner for predictive functions, focusing on scenarios where 100% accuracy isn't expected or practical. Similar to Jest, vitest, or ava, but designed specifically for testing search, auto-complete, ML models, and statistical functions.\n\n## When to Use\n\n✅ **Perfect for:**\n- Large test suites comparing input/output pairs\n- Statistical/ML model testing where perfect accuracy isn't possible\n- Testing flaky legacy systems\n\n❌ **Not recommended for:**\n- Small, example-based test suites (use Jest/vitest instead)\n- Tests requiring advanced mocking or spy functionality\n\n## Key Design Notes\n\n1. **Library-based**: Unlike Jest/vitest, tots is imported as a library rather than used as a standalone runtime\n2. **Effect-based**: Requires [effect](https://effect.website/) as a dependency - your tested functions must return an [Effect](https://effect.website/docs/guides/essentials/the-effect-type)\n\n> ⚠️ **Note**: This library is in alpha. Expect frequent breaking changes without warning. A beta phase with migration guidance is planned.\n\n> 📖 **Upgrading to v1?** See [MIGRATION_GUIDE_V1.md](./MIGRATION_GUIDE_V1.md).\n\n## Getting Started\n\n### Installation\n\nInstall the required packages with your preferred package manager:\n\n```bash\n@creative-introvert/tons-of-tests\n@creative-introvert/tons-of-tests-cli\neffect\n```\n\n### Basic Example\n\nDefine your test suite:\n\n```ts\n// my-test-suite.ts\nimport {Classify} from '@creative-introvert/tons-of-tests';\nimport * as CLI from '@creative-introvert/tons-of-tests-cli';\nimport {Effect} from 'effect';\n\nconst myFunction = (input: number) => Promise.resolve(input * 1.7);\n\nCLI.run({\n    testSuite: {\n        name: 'with-cli-simple',\n        testCases: [\n            {input: 0, expected: 0},\n            {input: 1, expected: 2},\n            {input: 2, expected: 3},\n            {input: 3, expected: 4},\n            {input: 4, expected: 5},\n        ],\n        // `makeClassify` customises how observed vs. expected results are\n        // labelled. `isEqual` decides TP/TN vs FP/FN — here we tolerate a\n        // 0.4 absolute error, so `1.7` passes for `2`, etc.\n        classify: Classify.makeClassify({\n            isEqual: (a, b) => Math.abs(b - a) <= 0.4,\n        }),\n        program: (input: number) => Effect.promise(() => myFunction(input)),\n    },\n    dbPath: 'with-cli-simple.db',\n    concurrency: 1,\n});\n```\n\n> Omit `classify` to get default strict equality; then every non-exact result is labelled FP.\n\n`testCases` can also be an Effect `Stream`, which is useful for large or generated suites that are consumed lazily by the runner:\n\n```ts\nimport {Stream} from 'effect';\n\nCLI.run({\n    testSuite: {\n        name: 'with-cli-stream',\n        testCases: Stream.fromIterable([\n            {input: 0, expected: 0},\n            {input: 1, expected: 2},\n        ]),\n        program: (input: number) => Effect.promise(() => myFunction(input)),\n    },\n    dbPath: 'with-cli-stream.db',\n});\n```\n\n#### Summarize\n\n```\npnpx tsx my-test-suite.ts summarize\n\n┌───────────────────────────────────────────────────────────────────────────┐\n│ SUMMARY                                                                   │\n├─────┬──────────┬────────┬──────┬───────┬──────────┬────────┬──────────────┤\n│ #/∑ │ hash     │ ms     │ tags │ input │ expected │ label₀ │ diff result₀ │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ 1/5 │ bd04cb2c │ 0.69ms │      │ 0     │ 0        │ TP     │              │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ 2/5 │ 562e2cca │ 0.36ms │      │ 1     │ 2        │ TP     │ 2 => 1.7     │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ 3/5 │ a5afd52f │ 3.30ms │      │ 2     │ 3        │ TP     │ 3 => 3.4     │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ 4/5 │ 5f7f8725 │ 1.19ms │      │ 3     │ 4        │ FP     │ 4 => 5.1     │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ 5/5 │ 6cc26923 │ 1.22ms │      │ 4     │ 5        │ FP     │ 5 => 6.8     │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ #/∑ │ hash     │ ms     │ tags │ input │ expected │ label₀ │ diff result₀ │\n└─────┴──────────┴────────┴──────┴───────┴──────────┴────────┴──────────────┘\n\n\n┌────────────────────────────────────────────────────────────────────┐\n│ STATS                                                              │\n├───┬────┬────┬────┬────┬───────────┬────────┬──────────┬────────────┤\n│ ∑ │ TP │ TN │ FP │ FN │ precision │ recall │ timeMean │ timeMedian │\n├───┼────┼────┼────┼────┼───────────┼────────┼──────────┼────────────┤\n│ 5 │ 3  │ 0  │ 2  │ 0  │ 0.60      │ 1.00   │ 1.35ms   │ 1.19ms     │\n├───┼────┼────┼────┼────┼───────────┼────────┼──────────┼────────────┤\n│ ∑ │ TP │ TN │ FP │ FN │ precision │ recall │ timeMean │ timeMedian │\n└───┴────┴────┴────┴────┴───────────┴────────┴──────────┴────────────┘\n```\n\n#### Summarize With Labels Filter\n\n```\npnpx tsx my-test-suite.ts summarize --labels TP\n\n┌───────────────────────────────────────────────────────────────────────────┐\n│ SUMMARY                                                                   │\n├─────┬──────────┬────────┬──────┬───────┬──────────┬────────┬──────────────┤\n│ #/∑ │ hash     │ ms     │ tags │ input │ expected │ label₀ │ diff result₀ │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ 1/3 │ bd04cb2c │ 0.52ms │      │ 0     │ 0        │ TP     │              │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ 2/3 │ 562e2cca │ 0.41ms │      │ 1     │ 2        │ TP     │ 2 => 1.7     │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ 3/3 │ a5afd52f │ 0.74ms │      │ 2     │ 3        │ TP     │ 3 => 3.4     │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┤\n│ #/∑ │ hash     │ ms     │ tags │ input │ expected │ label₀ │ diff result₀ │\n└─────┴──────────┴────────┴──────┴───────┴──────────┴────────┴──────────────┘\n\n\n┌────────────────────────────────────────────────────────────────────┐\n│ STATS                                                              │\n├───┬────┬────┬────┬────┬───────────┬────────┬──────────┬────────────┤\n│ ∑ │ TP │ TN │ FP │ FN │ precision │ recall │ timeMean │ timeMedian │\n├───┼────┼────┼────┼────┼───────────┼────────┼──────────┼────────────┤\n│ 5 │ 3  │ 0  │ 2  │ 0  │ 0.60      │ 1.00   │ 1.23ms   │ 1.28ms     │\n├───┼────┼────┼────┼────┼───────────┼────────┼──────────┼────────────┤\n│ ∑ │ TP │ TN │ FP │ FN │ precision │ recall │ timeMean │ timeMedian │\n└───┴────┴────┴────┴────┴───────────┴────────┴──────────┴────────────┘\n```\n\n#### Summarize With Tag Filters\n\n`--tags` includes results matching ANY of the listed tags (OR):\n\n```\npnpx tsx my-test-suite.ts summarize --tags foo,bar\n```\n\n`--all-tags` includes results matching ALL listed tags (AND):\n\n```\npnpx tsx my-test-suite.ts summarize --all-tags foo,bar\n```\n\nBoth flags compose with `--labels`.\n\n#### Summarize From Cache\n\n`--cached` reads the most recently inserted test results from the local DB\ninstead of re-running the program. This is useful when you want to re-format\nor re-filter without incurring the cost of a full run:\n\n```\npnpx tsx my-test-suite.ts summarize --cached\n```\n\n`diff --cached` behaves the same way for the current-run side of the diff.\n\n#### Write Test Results\n\n```bash\npnpx tsx my-test-suite.ts commit\n```\n\n#### Diff\n\nThe diff command compares your current test results with previously committed results. This is useful when you've made changes to either:\n- Your test suite's inputs or expected values\n- The implementation of the function being tested\n\n```diff\ndiff --git a/my-test-suite.ts b/my-test-suite.ts\nindex 21cd713..ab1b6dc 100644\n--- a/my-test-suite.ts\n+++ b/my-test-suite.ts\n@@ -1,7 +1,7 @@\n import * as CLI from '@creative-introvert/tots-cli';\n import {Effect} from 'effect';\n \n-const myFunction = (input: number) => Promise.resolve(input * 1.7);\n+const myFunction = (input: number) => Promise.resolve(input * 2);\n \n void CLI.run({\n     testSuite: {\n```\n\n```\npnpx tsx my-test-suite.ts diff\n# or, if you want it to process.exit(1) on diff\npnpx tsx my-test-suite.ts diff --exit-on-diff\n\n┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ SUMMARY                                                                                             │\n├─────┬──────────┬────────┬──────┬───────┬──────────┬────────┬──────────────┬─────────┬───────────────┤\n│ #/∑ │ hash     │ ms     │ tags │ input │ expected │ label₀ │ diff result₀ │ label₋₁ │ diff result₋₁ │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┼─────────┼───────────────┤\n│ 1/4 │ 562e2cca │ 0.23ms │      │ 1     │ 2        │ TP     │              │ FP      │ 2 => 1.7      │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┼─────────┼───────────────┤\n│ 2/4 │ a5afd52f │ 3.66ms │      │ 2     │ 3        │ FP     │ 3 => 4       │ FP      │ 3 => 3.4      │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┼─────────┼───────────────┤\n│ 3/4 │ 5f7f8725 │ 1.19ms │      │ 3     │ 4        │ FP     │ 4 => 6       │ FP      │ 4 => 5.1      │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┼─────────┼───────────────┤\n│ 4/4 │ 6cc26923 │ 0.98ms │      │ 4     │ 5        │ FP     │ 5 => 8       │ FP      │ 5 => 6.8      │\n├─────┼──────────┼────────┼──────┼───────┼──────────┼────────┼──────────────┼─────────┼───────────────┤\n│ #/∑ │ hash     │ ms     │ tags │ input │ expected │ label₀ │ diff result₀ │ label₋₁ │ diff result₋₁ │\n└─────┴──────────┴────────┴──────┴───────┴──────────┴────────┴──────────────┴─────────┴───────────────┘\n\n\n┌────────────────────────────────────────────────────────────────────┐\n│ STATS                                                              │\n├───┬────┬────┬────┬────┬───────────┬────────┬──────────┬────────────┤\n│ ∑ │ TP │ TN │ FP │ FN │ precision │ recall │ timeMean │ timeMedian │\n├───┼────┼────┼────┼────┼───────────┼────────┼──────────┼────────────┤\n│ 5 │ 2  │ 0  │ 3  │ 0  │ 0.40      │ 1.00   │ 1.30ms   │ 0.98ms     │\n├───┼────┼────┼────┼────┼───────────┼────────┼──────────┼────────────┤\n│ ∑ │ TP │ TN │ FP │ FN │ precision │ recall │ timeMean │ timeMedian │\n└───┴────┴────┴────┴────┴───────────┴────────┴──────────┴────────────┘\n\n\n┌────────────────────────────────────────┐\n│ DIFF                                   │\n├────┬────┬────┬────┬───────────┬────────┤\n│ TP │ TN │ FP │ FN │ precision │ recall │\n├────┼────┼────┼────┼───────────┼────────┤\n│ 1  │ 0  │ -1 │ 0  │ 0.20      │ 0.00   │\n├────┼────┼────┼────┼───────────┼────────┤\n│ TP │ TN │ FP │ FN │ precision │ recall │\n└────┴────┴────┴────┴───────────┴────────┘\n```\n\nCheckout `workspace/examples/src/with-cli` for more examples.\n\n```\npnpx tsx <file-path>\n# e.g.\npnpx tsx ./workspace/examples/src/with-cli/simple-run.ts\npnpx tsx ./workspace/examples/src/with-cli/simple-effect.ts\n```\n\n### Using the CLI programmatically\n\n`CLI.run(config, args?)` is the process-entry helper. It parses `args ??\nprocess.argv`, runs the CLI under `NodeRuntime.runMain`, and returns `void`:\n\n```ts\nimport * as CLI from '@creative-introvert/tons-of-tests-cli';\n\nvoid CLI.run(\n    {\n        testSuite,\n        dbPath: 'with-cli-simple.db',\n    },\n    ['node', 'script', 'summarize'],\n);\n```\n\nUse `CLI.effect(config, args?)` when another Effect application owns the\nruntime or provides dependencies required by `testSuite.program`:\n\n```ts\nimport * as CLI from '@creative-introvert/tons-of-tests-cli';\nimport {NodeRuntime} from '@effect/platform-node';\nimport {Effect} from 'effect';\n\nCLI.effect(\n    {\n        testSuite,\n        dbPath: 'with-cli-simple.db',\n    },\n    ['node', 'script', 'summarize'],\n).pipe(\n    Effect.provide(MyProgramLayer),\n    NodeRuntime.runMain,\n);\n```\n\nIf you need the last committed test-run hash from inside another script, use\nthe dedicated helper:\n\n```ts\nimport * as CLI from '@creative-introvert/tons-of-tests-cli';\n\nconst hash = await CLI.getLastTestRunHash({\n    testSuite,\n    dbPath: 'with-cli-simple.db',\n});\n// hash: string | null\n```\n\nIf you compose the CLI's `diff` programmatically (via `_diff` or a custom\nharness), `diff --exit-on-diff` fails with a typed `DiffNonEmpty` error\nwhen the current run has visible diffs:\n\n```ts\nimport {DiffNonEmpty} from '@creative-introvert/tons-of-tests-cli';\n\n// ... compose _diff into your own Effect pipeline, then:\nEffect.catchTag('DiffNonEmpty', () => /* handle */);\n```\n\nAt the process entry point (`CLI.run`), `DiffNonEmpty` is translated to\n`process.exitCode = 1` — the user-facing \"exit with code 1 on diff\"\nbehavior is unchanged.\n\n## Why No Runtime?\n\nMost test runners like Jest and Vitest come with their own command-line interface (CLI). When you run `jest` or `vitest`, these tools automatically find your test files, execute them, and report results.\n\nWhile convenient, this approach introduces significant complexity:\n\n1. **Build System Complexity**: Modern JavaScript/TypeScript projects use various build tools and configurations. A test runner needs complex logic to handle:\n   - TypeScript compilation with different configurations\n   - Module systems (ESM vs CommonJS)\n   - Framework-specific code (React, Svelte, etc.)\n   - Custom babel/esbuild/swc configurations\n\n2. **Framework vs Library Trade-offs**: Test runners like Jest are frameworks - they control the execution flow and call your code. This means:\n   - The framework needs to provide many configuration options\n   - Customization requires understanding framework internals\n   - Extensions must fit within the framework's constraints\n\nWhile we could integrate with existing test runners like Vitest, this would still impose their limitations and complexity.\n\nInstead, `tots` is designed as a library that you import and use directly in your code. While this means writing a bit more boilerplate, it offers:\n- Simpler implementation with fewer moving parts\n- Full control over test execution\n- Easy integration with your existing build tools\n- Unlimited extensibility through normal JavaScript/TypeScript code\n","readmeFilename":"README.md"}