Created
May 14, 2012 23:55
-
-
Save MichaelDrogalis/2698163 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (ns distance.test.miles | |
| (:use [clojure.test]) | |
| (:require [distance.units]) | |
| (:import [distance.units Miles]) | |
| (:import [distance.units Kilometers]) | |
| (:import [distance.units Meters]) | |
| (:use [distance.units])) | |
| (deftest miles-to-miles | |
| (is | |
| (= (to-miles (Miles. 5)) (Miles. 5)) | |
| "Converting miles to miles returned a different length.")) | |
| (deftest miles-to-km | |
| (is | |
| (= (to-km (Miles. 1)) (Kilometers. 1.609)) | |
| "Converting miles to kilometers failed.")) | |
| (deftest miles-to-meters | |
| (is | |
| (= (to-meters (Miles. 1)) (Meters. 1609)) | |
| "Converting miles to meters failed.")) | |
| (deftest km-to-km | |
| (is | |
| (= (to-km (Kilometers. 5)) (Kilometers. 5)) | |
| "Converting kilometers to kilometers returned a different length.")) | |
| (deftest km-to-miles | |
| (is | |
| (= (to-miles (Kilometers. 1.609)) (Miles. 1)) | |
| "Converting kilometers to miles failed.")) | |
| (deftest km-to-meters | |
| (is | |
| (= (to-meters (Kilometers. 1)) (Meters. 1000)) | |
| "Converting kilometers to meters failed.")) | |
| (deftest meters-to-meters | |
| (is | |
| (= (to-meters (Meters. 500)) (Meters. 500)) | |
| "Converting meters to meters failed.")) | |
| (deftest meters-to-kilometers | |
| (is | |
| (= (to-km (Meters. 1000)) (Kilometers. 1)) | |
| "Converting meters to kilometers failed.")) | |
| (deftest meters-to-miles | |
| (is | |
| (= (to-miles (Meters. 1609)) (Miles. 1)) | |
| "Converting meters to miles failed.")) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (ns distance.units) | |
| (def *miles-meters-ratio* 1.609) | |
| (def *metric-ratio* 1000) | |
| (defrecord Miles [length]) | |
| (defrecord Kilometers [length]) | |
| (defrecord Meters [length]) | |
| (defprotocol Convertable | |
| (to-miles [this]) | |
| (to-km [this]) | |
| (to-meters [this])) | |
| (extend-type Miles | |
| Convertable | |
| (to-miles [this] (Miles. (:length this))) | |
| (to-km [this] (Kilometers. (* (:length this) *miles-meters-ratio*))) | |
| (to-meters [this] (to-meters (to-km this)))) | |
| (extend-type Kilometers | |
| Convertable | |
| (to-miles [this] (Miles. (/ (:length this) *miles-meters-ratio*))) | |
| (to-km [this] (Kilometers. (:length this))) | |
| (to-meters [this] (Meters. (* (:length this) *metric-ratio*)))) | |
| (extend-type Meters | |
| Convertable | |
| (to-miles [this] (to-miles (to-km this))) | |
| (to-km [this] (Kilometers. (/ (:length this) *metric-ratio*))) | |
| (to-meters [this] this)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment