Welcome! Please see the About page for a little more info on how this works.

0 votes
in Refs, agents, atoms by

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.

1 Answer

0 votes
Reference: https://clojure.atlassian.net/browse/CLJ-1915 (reported by claj)