diff --git a/ansi-tests/gcd-aux.lsp b/ansi-tests/gcd-aux.lsp
new file mode 100644
index 0000000000000000000000000000000000000000..abe27eaff65101b29e1d6d5dd1dd79333baee4c6
--- /dev/null
+++ b/ansi-tests/gcd-aux.lsp
@@ -0,0 +1,26 @@
+;-*- Mode:     Lisp -*-
+;;;; Author:   Paul Dietz
+;;;; Created:  Wed Sep  3 06:57:22 2003
+;;;; Contains: Aux. functions for testing GCD
+
+(in-package :cl-test)
+
+(defun my-gcd (x y)
+  (cond
+   ((< x 0)
+    (my-gcd (- x) y))
+   ((< y 0)
+    (my-gcd x (- y)))
+   ((<= x y)
+    (my-gcd* x y))
+   (t
+    (my-gcd* y x))))
+
+(defun my-gcd* (x y)
+  ;;; 0 <= x <= y
+  (loop
+   (when (zerop x) (return y))
+   (psetq x (mod y x)
+	  y x)))
+
+  
diff --git a/ansi-tests/gcd.lsp b/ansi-tests/gcd.lsp
new file mode 100644
index 0000000000000000000000000000000000000000..406a2bc664ac5ba6cc4cd68bb3976cb211694aa7
--- /dev/null
+++ b/ansi-tests/gcd.lsp
@@ -0,0 +1,65 @@
+;-*- Mode:     Lisp -*-
+;;;; Author:   Paul Dietz
+;;;; Created:  Wed Sep  3 06:51:03 2003
+;;;; Contains: Tests of GCD
+
+(in-package :cl-test)
+
+(compile-and-load "numbers-aux.lsp")
+(compile-and-load "gcd-aux.lsp")
+
+(deftest gcd.error.1
+  (loop for x in *mini-universe*
+	unless (or (integerp x)
+		   (eq (eval `(classify-error (gcd ',x))) 'type-error))
+	collect x)
+  nil)
+
+(deftest gcd.1
+  (gcd)
+  0)
+
+(deftest gcd.2
+  (loop for i = (random-fixnum)
+	for a = (abs i)
+	repeat 10000
+	unless (and (eql a (gcd i))
+		    (eql a (gcd 0 i)))
+	collect i)
+  nil)
+
+(deftest gcd.3
+  (loop for i = (random-from-interval 10000000000000000)
+	for a = (abs i)
+	repeat 10000
+	unless (and (eql a (gcd i))
+		    (eql a (gcd i 0)))
+	collect i)
+  nil)
+
+(deftest gcd.4
+  (loop for i = (random-fixnum)
+	for j = (random-fixnum)
+	repeat 1000
+	unless (eql (my-gcd i j) (gcd i j))
+	collect (list i j))
+  nil)
+
+(deftest gcd.5
+  (let ((bound (ash 1 200)))
+    (loop for i = (random-from-interval bound)
+	  for j = (random-from-interval bound)
+	  repeat 1000
+	  unless (eql (my-gcd i j) (gcd i j))
+	  collect (list i j)))
+  nil)
+
+(deftest gcd.6
+  (loop for i = (random-fixnum)
+	for j = (random-fixnum)
+	for k = (random-fixnum)
+	repeat 1000
+	unless (eql (my-gcd i (my-gcd j k)) (gcd i j k))
+	collect (list i j k))
+  nil)
+
diff --git a/ansi-tests/load-numbers.lsp b/ansi-tests/load-numbers.lsp
index 3faca6a6d2befa62146e445076c8d6dd0c18bedd..d884ac8849e82180c1c93074904f27ad5a4afe10 100644
--- a/ansi-tests/load-numbers.lsp
+++ b/ansi-tests/load-numbers.lsp
@@ -32,6 +32,7 @@
 (load "abs.lsp")
 ;;(load "exp.lsp")
 (load "expt.lsp")
+(load "gcd.lsp")
 
 (load "rational.lsp")
 (load "rationalize.lsp")