Dustin Getz / Aug 13 2022
photon nextjournal test (CLJ only)
{:deps {com.hyperfiddle/photon {:mvn/version "20220810-203215"}
hyperfiddle/rcf {:git/url "https://github.com/hyperfiddle/rcf"
:git/sha "21f38ce1d15787b83696e6797be41f762619814f"}
org.clojure/clojure {:mvn/version "1.11.1"}
;; complient is used for autocompletion
compliment/compliment {:mvn/version "0.3.9"}}}
Extensible Data Notation
(require
[hyperfiddle.rcf :as rcf :refer [tests ! % with]]
[hyperfiddle.photon :as p])
(hyperfiddle.rcf/enable!)
14.5s
(tests "hello world"
(def dispose (p/run (rcf/! ::x)))
% := ::x
(dispose))
0.8s
(tests "react based on a ref"
(def !x (atom 0))
(def dispose (p/run (rcf/! (p/watch !x))))
% := 0
(swap! !x inc)
% := 1
(dispose))
0.7s
(tests "dataflow diamond"
(def !x (atom 0))
(def dispose
(p/run
(let [x (p/watch !x)
a (inc x)
b (inc x)]
(! (+ a b)))))
% := 2
(swap! !x inc)
% := 4
(swap! !x inc)
% := 6
(dispose))
0.6s
(tests "reactive function call"
(def !x (atom 1))
(def !f (atom +))
(with (p/run (let [f (p/watch !f)
x (p/watch !x)]
(! (f 0 x))))
% := 1
(swap! !x inc)
% := 2
(reset! !f -)
% := -2))
0.7s