From bf2e44b86cb7363f7e5b0f70c7c272802f6b6d76 Mon Sep 17 00:00:00 2001
From: pfdietz <pfdietz@localhost>
Date: Wed, 3 Sep 2003 12:12:55 +0000
Subject: [PATCH] Initial checkin of tests for GCD.

---
 ansi-tests/gcd-aux.lsp      | 26 +++++++++++++++
 ansi-tests/gcd.lsp          | 65 +++++++++++++++++++++++++++++++++++++
 ansi-tests/load-numbers.lsp |  1 +
 3 files changed, 92 insertions(+)
 create mode 100644 ansi-tests/gcd-aux.lsp
 create mode 100644 ansi-tests/gcd.lsp

diff --git a/ansi-tests/gcd-aux.lsp b/ansi-tests/gcd-aux.lsp
new file mode 100644
index 00000000..abe27eaf
--- /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 00000000..406a2bc6
--- /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 3faca6a6..d884ac88 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")
-- 
GitLab