As per discussion with Alex Miller Mars 3rd 2016 on clojure-dev, Alex suggested we should add tests to clojure.core/atom functionality, of which there is none today.
I proposed tests for
- the various ways to instatiate atoms (with and without validator and metadata)
- that validators throws correctly
- adding and removing watchers and that they trig as one would expected.
- various ways of changing values (no aim for finding high-load concurrency issues or patological cases or similar).
- that the arities of the interface in IAtom .swap works as expected - ie no reflection warnings (help/pointers for these type of cases needed!)
- generative, tests trying to find the glitches while using atoms (the things excluded above).
Alex suggested generative testing, but no performance tests.
The patch "0001-atom-unit-tests.clj" (attached) contains unit tests for
- creating "bare" atom
- creating atom with validator
- that validate-fn triggers and that the atom is unchanged
- that deref (@) reader macro creates correct '(clojure.core/deref a)
- that CAS works for ordinary values (no validator-triggering etc).
There are plenty of combinations not covered with these tests, but this is a start.
To cover all cases (like cas-ing with invalid values and other strange things) generative testing is indeed a must.