jsverify
proposal-pipeline-operator
jsverify | proposal-pipeline-operator | |
---|---|---|
5 | 102 | |
1,666 | 7,382 | |
0.1% | 0.7% | |
1.8 | 2.7 | |
about 3 years ago | 5 months ago | |
JavaScript | HTML | |
MIT License | BSD 3-clause "New" or "Revised" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
jsverify
-
The 5 principles of Unit Testing
Libraries like JSVerify or Fast-Check offer essential tools to facilitate property-based testing.
-
Ask HN: What's your favorite software testing framework and why?
I tend to use anything that offers property-testing, since tests are much shorter to write and uncover lots more hidden assumptions.
My go-to choices per language are:
- Python: Hypothesis https://hypothesis.readthedocs.io/en/latest (also compatible with PyTest)
- Scala: ScalaCheck https://scalacheck.org (also compatible with ScalaTest)
- Javascript/Typescript: JSVerify https://jsverify.github.io
- Haskell: LazySmallCheck2012 https://github.com/UoYCS-plasma/LazySmallCheck2012/blob/mast...
- When I wrote PHP (over a decade ago) there was no decent property-based test framework, so I cobbled one together https://github.com/Warbo/php-easycheck
All of the above use the same basic setup: tests can make universally-quantified statements (e.g. "for all (x: Int), foo(x) == foo(foo(x))"), then the framework checks that statement for a bunch of different inputs.
Most property-checking frameworks generate data randomly (with more or less sophistication). The Haskell ecosystem is more interesting:
- QuickCheck was one of the first property-testing frameworks, using random genrators.
- SmallCheck came later, which enumerates data instead (e.g. testing a Float might use 0, 1, -1, 2, -2, 0.5, -0.5, etc.). That's cute, but QuickCheck tends to exercise more code paths with each input.
- LazySmallCheck builds up test data on-demand, using Haskell's pervasive laziness. Tests are run with an error as input: if they pass, we're done; if they fail, we're done; if they trigger the error, they're run again with slightly more-defined inputs. For example, if the input is supposed to be a list, we try again with the two forms of list: empty and "cons" (the arguments to cons are both errors, to begin with). This exercises even more code paths for each input.
- LazySmallCheck2012 is a more versatile "update" to LazySmallCheck; in particular, it's able to generate functions.
-
Property Based Testing Framework for Node
The usage of hypothesis is very intuitive and simple, and presents the concept of property-based testing perfectly. So I also wanted to find an equivalent alternative in Node. Two of them have high star ratings on Github, JSVerify with 1.6K stars and fast-check with 2.8K stars. So I took some time to study fast-check a little bit and try to get closer to my daily work.
-
Machine Readable Specifications at Scale
Systems I've used for this include https://agda.readthedocs.io/en/v2.6.0.1/getting-started/what... https://coq.inria.fr https://www.idris-lang.org and https://isabelle.in.tum.de
An easier alternative is to try disproving the statement, by executing it on thousands of examples and seeing if any fail. That gives us less confidence than a full proof, but can still be better than traditional "there exists" tests. This is called property checking or property-based testing. Systems I've used for this include https://hypothesis.works https://hackage.haskell.org/package/QuickCheck https://scalacheck.org and https://jsverify.github.io
-
React to Elm Migration Guide
Using create-react-app, you’ll run npm test which uses Jest internally. If you are dealing with a lot of data on the UI, or using TypeScript, use JSVerify for property tests. For end to end tests, Cypress is a great choice.
proposal-pipeline-operator
-
Pipeline Operator great again!
Current Status: You'd have to check the TC39 proposals repository or the official proposal text for the most recent status. As of my last update, it had not yet reached Stage 4 (final stage) of the TC39 process, which means it wasn't part of the ECMAScript specification yet.
-
pipesAreFun
Javascript may get it https://github.com/tc39/proposal-pipeline-operator https://youtu.be/dQw4w9WgXcQ
-
JavaScript Gom Jabbar
It can be further simplified. For example, you don't need two separate functions to extract the first chat completion message etc.
This version:
- uses existing language constructs
- can be immediately understood even by the most junior devs
- is likely to be 1000 times faster
- does not rely on an external dependency that currently has 143 issues and every two weeks releases a new version adding dozens of new methods to things
Note: one thing I do wish Javascript adopted is pipes: https://github.com/tc39/proposal-pipeline-operator
-
What's new in ES2023?
Still in stage 2 atm https://github.com/tc39/proposal-pipeline-operator
- lizod - spiritual successor of zod less than 1kb
- Updates from the 96th TC39 meeting
-
Mostly adequate guide to FP (in JavaScript)
Both are active tc39 proposals :)
https://github.com/tc39/proposal-pipeline-operator - Stage 2
https://github.com/tc39/proposal-pattern-matching - Stage 1
Hopefully we get both in the next couple of years.
-
Tipe - typed pipe
Some time ago I saw how hyped JS community was about pipeline operator proposal. So I tried to make something similar in python. There is how tipe module was created. Check it out if you are interested: https://github.com/mishankov/tipe
-
CoffeeScript for TypeScript
We often add promising TC39 proposals into Civet so people can experiment without waiting.
We've added https://github.com/tc39/proposal-pipeline-operator, a variant of https://github.com/tc39/proposal-pattern-matching, a variant of https://github.com/tc39/proposal-string-dedent and others.
Since our goal is to be 99% compatible with ES we'll need to accommodate any proposals that become standard and pick up anything TC39 leaves on the table (rest parameters in any position, etc.)
-
[AskJS] Is JavaScript missing some built-in methods?
The Proposal is for the Hack pipe, so your example would be
What are some alternatives?
greenlight - Clojure integration testing framework
ionide-vscode-fsharp - VS Code plugin for F# development
testy - test helpers for more meaningful, readable, and fluent tests
content - The content behind MDN Web Docs
LazySmallCheck2012 - Lazy SmallCheck with functional values and existentials!
ramda - :ram: Practical functional Javascript
fast-check - Property based testing framework for JavaScript (like QuickCheck) written in TypeScript
FiraCode - Free monospaced font with programming ligatures
hitchstory - Type-safe YAML integration tests. Tests that write your docs. Tests that rewrite themselves.
Gigablast - Nov 20 2017 -- A distributed open source search engine and spider/crawler written in C/C++ for Linux on Intel/AMD. From gigablast dot com, which has binaries for download. See the README.md file at the very bottom of this page for instructions.
datadriven - Data-Driven Testing for Go
proposal-partial-application - Proposal to add partial application to ECMAScript