--- /dev/null
+(ns adventofcode2019.day14-test
+ (:require [clojure.test :refer :all]
+ [adventofcode2019.day14 :refer :all]))
+
+(deftest check-make-graph
+ (is (= (make-graph ["3 ORE => 2 ABC"
+ "3 ABC => 1 FUEL"])
+ {"ABC" {{"ORE" 3/2} 1}
+ "FUEL" {{"ABC" 3} 1}})))
+
+(deftest simple-exchange
+ (is (= 3 (find-lowest-exchange-rate {"FUEL" {{"ORE" 1, "ABC" 2, "DEF" 3} 1
+ {"ORE" 3} 1
+ {"GHI" 5/2} 1}}
+ "FUEL" "ORE"))))
+
+(deftest trading-up
+ (is (= 6 (find-lowest-exchange-rate (make-graph ["3 ORE => 2 ABC"
+ "3 ABC => 1 FUEL"])
+ "FUEL" "ORE"))))
+
+(deftest complicated-exchange
+ (is (= 2 (find-lowest-exchange-rate (make-graph ["3 ORE => 2 ABC"
+ "3 ABC => 1 FUEL"
+ "2 ORE => 1 CDE"
+ "1 CDE => 1 FUEL"])
+ "FUEL" "ORE"))))
+
+(deftest very-tricky-exchange
+ (is (= 3 (find-lowest-exchange-rate (make-graph ["3 ORE => 2 ABC"
+ "3 ABC => 1 FUEL"
+ "4 ORE => 1 CDE"
+ "1 CDE => 1 FUEL"
+ "3 ORE => 2 FGH"
+ "1 FGH => 1 IJK"
+ "1 IJK => 1 FUEL"])
+ "FUEL" "ORE"))))