Guy Steele's three-part smoke test for Common Lisp involves evaluating (atanh -2). Traditionally, a Lisp passes if it returns a complex number; if it returns the correct complex number, so much the better. The atanh function is not provided in R7RS-small, so I defined it as follows:
(define (atanh x) (/ (- (log (+ 1 x)) (log (- 1 x))) 2))(Note: KSi already defines atanh and will not allow its redefinition.)
Returns -0.5493061443340549+1.5707963267948966i, the correct complex number: Racket, Gauche, MIT, Chicken with the numbers egg, Scheme48, Guile, Kawa, Chibi, Chez, Vicare, Larceny, Ypsilon, IronScheme, STklos, KSi, S7, Spark, Sagittarius
Returns NaN (i.e. it is attempting to use a real-number log function) when the argument is 2, but returns the correct complex number when the argument is 2.0+0.0i: scsh, SISC, Mosh
Returns an incorrect complex number: SCM
No support for log of negative numbers: UMB, Owl Lisp
No complex numbers: plain Chicken, Bigloo, Ikarus, NexJ, SigScheme, Shoe, TinyScheme, Scheme 9, Dream, RScheme, BDC, XLisp, Rep, Schemik, Elk, VX, Oaklisp, Llava, SXM, Sizzle, FemtoLisp, Dfsch, Inlab.