From 20aa54a1e51de9f4e3746018e039578b41421fd3 Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan Date: Mon, 7 Jun 2010 16:33:26 +0530 Subject: [PATCH] solution and tests for exercise 2.1 --- src/sicp/ex2_1.clj | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/sicp/ex2_1.clj diff --git a/src/sicp/ex2_1.clj b/src/sicp/ex2_1.clj new file mode 100644 index 0000000..9020280 --- /dev/null +++ b/src/sicp/ex2_1.clj @@ -0,0 +1,30 @@ +(ns sicp.ex2_1 + (:use [sicp ch2_1 utils] + [clojure.test])) + +;; the gcd version of make-rat does this automatically for us. But assuming +;; we don't use gcd, here is the solution +(defn new-make-rat [x y] + (cond (and (< x 0) (< y 0)) (list (- x) (- y)) + (or (< x 0) (< y 0)) (if (< x 0) (list x y) (list (- x) (- y))) + :else (list x y))) + +(deftest test-num-p-den-p + (are [x y] (= x y) + (numer (new-make-rat 2 3)) 2 + (denom (new-make-rat 2 3)) 3)) + +(deftest test-num-p-den-n + (are [x y] (= x y) + (numer (new-make-rat 2 -3)) -2 + (denom (new-make-rat 2 -3)) 3)) + +(deftest test-num-n-den-n + (are [x y] (= x y) + (numer (new-make-rat -2 -3)) 2 + (denom (new-make-rat -2 -3)) 3)) + +(deftest test-num-n-den-p + (are [x y] (= x y) + (numer (new-make-rat -2 3)) -2 + (denom (new-make-rat -2 3)) 3)) \ No newline at end of file -- 2.45.2