(var palindrome? (comp (filter letter?) lower-case (= (reverse %)))) ;Arrange (var calls []) (function record f (fn (var! calls (append f)) (... (unmocked f) args))) (mock comp (record comp) filter (record filter) letter? (record letter?) lower-case (record lower-case) = (record =) reverse (record reverse)) (var sentence "In girum imus nocte et consumimur igni.") ;Act (var result (palindrome? sentence)) (unmock comp filter letter? lower-case = reverse) ;Assert (assert result) (var occurred (freqs calls)) (assert (= (len sentence) (occurred letter?))) ;letter? is called (len sentence) times (assert (... = 1 (map occurred [filter lower-case reverse =]))) ;other functions are called only once