diff --git a/ansi-tests/load-numbers.lsp b/ansi-tests/load-numbers.lsp
index a3a64e6ef638753cb05cfb038a0bb4c8cfee4210..2b4a8c0567b69699c42088df7143ea2762856d91 100644
--- a/ansi-tests/load-numbers.lsp
+++ b/ansi-tests/load-numbers.lsp
@@ -51,6 +51,7 @@
(load "incf.lsp")
(load "decf.lsp")
(load "lcm.lsp")
+(load "log.lsp")
(load "signum.lsp")
(load "sqrt.lsp")
(load "isqrt.lsp")
diff --git a/ansi-tests/log.lsp b/ansi-tests/log.lsp
new file mode 100644
index 0000000000000000000000000000000000000000..8e2ec8507c26087051b7d53a4d1156bf361fd25d
--- /dev/null
+++ b/ansi-tests/log.lsp
@@ -0,0 +1,113 @@
+;-*- Mode: Lisp -*-
+;;;; Author: Paul Dietz
+;;;; Created: Wed Feb 11 19:53:33 2004
+;;;; Contains: Tests of LOG
+
+(in-package :cl-test)
+
+(deftest log.1
+ (let ((result (log 1)))
+ (or (eqlt result 0)
+ (eqlt result 0.0)))
+ t)
+
+(deftest log.2
+ (mapcar #'log '(1.0s0 1.0f0 1.0d0 1.0l0))
+ (0.0s0 0.0f0 0.0d0 0.0l0))
+
+(deftest log.3
+ (loop for type in '(short-float single-float double-float long-float)
+ nconc
+ (loop
+ for x = (+ (random (coerce 1 type)) (/ 1 1000))
+ for rlist = (multiple-value-list (log x))
+ for y = (car rlist)
+ repeat 1000
+ unless (and (null (cdr rlist))
+ (typep y type))
+ collect (list x rlist)))
+ nil)
+
+(deftest log.4
+ (loop for type in '(short-float single-float double-float long-float)
+ nconc
+ (loop
+ for x = (1+ (random (coerce 1000000 type)))
+ for rlist = (multiple-value-list (log x))
+ for y = (car rlist)
+ repeat 1000
+ unless (and (null (cdr rlist))
+ (typep y type))
+ collect (list x rlist)))
+ nil)
+
+(deftest log.5
+ (loop for type in '(short-float single-float double-float long-float)
+ nconc
+ (loop
+ for x = (- (random (coerce 1 type)))
+ for rlist = (multiple-value-list (log x))
+ for y = (car rlist)
+ repeat 1000
+ unless (and (null (cdr rlist))
+ (typep y `(complex ,type)))
+ collect (list x rlist)))
+ nil)
+
+(deftest log.6
+ (loop for type in '(short-float single-float double-float long-float)
+ nconc
+ (loop
+ for x = (- (random (coerce 1000000 type)))
+ for rlist = (multiple-value-list (log x))
+ for y = (car rlist)
+ repeat 1000
+ unless (and (null (cdr rlist))
+ (typep y `(complex ,type)))
+ collect (list x rlist)))
+ nil)
+
+(deftest log.7
+ (loop for type in '(short-float single-float double-float long-float)
+ nconc
+ (loop
+ for x1 = (- (random (coerce 2000 type)) 1000)
+ for x2 = (1+ (random (coerce 1000 type)))
+ for rlist = (multiple-value-list (log (complex x1 x2)))
+ for y = (car rlist)
+ repeat 1000
+ unless (and (null (cdr rlist))
+ (typep y `(complex ,type)))
+ collect (list x rlist)))
+ nil)
+
+(deftest log.8
+ (loop for type in '(short-float single-float double-float long-float)
+ nconc
+ (loop
+ for x1 = (- (random (coerce 2000 type)) 1000)
+ for x2 = (- -1 (random (coerce 1000 type)))
+ for rlist = (multiple-value-list (log (complex x1 x2)))
+ for y = (car rlist)
+ repeat 1000
+ unless (and (null (cdr rlist))
+ (typep y `(complex ,type)))
+ collect (list x rlist)))
+ nil)
+
+;;; FIXME
+;;; Add tests for two-arg calls
+
+;;; FIXME
+;;; More accuracy tests here
+
+;;; Error tests
+
+(deftest log.error.1
+ (signals-error (log) program-error)
+ t)
+
+(deftest log.error.2
+ (signals-error (log 1.0 2.0 3.0) program-error)
+ t)
+