29 lines
786 B
Plaintext
29 lines
786 B
Plaintext
(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
|