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")