Prepended all namespaces with 'cc.journeyman'; tests run, 4 don't pass.
This commit is contained in:
parent
37dbb767ac
commit
310896cc95
34 changed files with 107 additions and 81 deletions
|
|
@ -0,0 +1,92 @@
|
|||
(ns cc.journeyman.the-great-game.merchants.planning-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[cc.journeyman.the-great-game.utils :refer [deep-merge]]
|
||||
[cc.journeyman.the-great-game.world.world :refer [default-world]]
|
||||
[cc.journeyman.the-great-game.merchants.planning :refer [plan-trade select-cargo]]))
|
||||
|
||||
|
||||
(deftest plan-trade-test
|
||||
(testing "Lower level trade planning"
|
||||
(let [world (deep-merge
|
||||
default-world
|
||||
{:merchants
|
||||
{:fiona
|
||||
{:known-prices
|
||||
{:aberdeen
|
||||
{:iron
|
||||
[{:price 1.5 :date 1}
|
||||
{:price 1.3 :date 0}]}
|
||||
:buckie
|
||||
{:iron
|
||||
[{:price 1.7 :date 1}
|
||||
{:price 2 :date 0}]}}}}
|
||||
:cities
|
||||
{:falkirk
|
||||
{:stock {:iron 20}}}})
|
||||
actual (plan-trade :fiona world :iron)]
|
||||
(is (= (:origin actual) :falkirk)
|
||||
"Fiona is in Falkirk, so her plan must originate there")
|
||||
(is (= (:commodity actual) :iron)
|
||||
"Iron is the only thing available in Falkirk, so plan must carry iron")
|
||||
(is (= (:destination actual) :buckie)
|
||||
"Fiona believes Buckie offers the best price for iron, so should go there"))))
|
||||
|
||||
|
||||
(deftest select-cargo-test
|
||||
(testing "Top level single trade planning: single candidate commodity"
|
||||
(let [world (deep-merge
|
||||
default-world
|
||||
{:merchants
|
||||
{:fiona
|
||||
{:known-prices
|
||||
{:aberdeen
|
||||
{:iron
|
||||
[{:price 1.5 :date 1}
|
||||
{:price 1.3 :date 0}]}
|
||||
:buckie
|
||||
{:iron
|
||||
[{:price 1.7 :date 1}
|
||||
{:price 2 :date 0}]}}}}
|
||||
:cities
|
||||
{:falkirk
|
||||
{:stock {:iron 20}}}})
|
||||
actual (select-cargo :fiona world)]
|
||||
(is (= (:origin actual) :falkirk)
|
||||
"Fiona is in Falkirk, so her plan must originate there")
|
||||
(is (= (:commodity actual) :iron)
|
||||
"Iron is the only thing available in Falkirk, so plan must carry iron")
|
||||
(is (= (:destination actual) :buckie)
|
||||
"Fiona believes Buckie offers the best price for iron, so should go there")
|
||||
(is (= (:quantity actual) 1)
|
||||
"Fiona can carry only one unit of iron.")
|
||||
(is (= (:expected-profit actual) 0.7))))
|
||||
(testing "Top level single trade planning: multiple candidate commodities"
|
||||
(let [world (deep-merge
|
||||
default-world
|
||||
{:merchants
|
||||
{:fiona
|
||||
{:known-prices
|
||||
{:aberdeen
|
||||
{:iron
|
||||
[{:price 1.5 :date 1}
|
||||
{:price 1.3 :date 0}]
|
||||
:whisky [{:price 4 :date 0}]}
|
||||
:buckie
|
||||
{:iron
|
||||
[{:price 1.7 :date 1}
|
||||
{:price 2 :date 0}]}}}}
|
||||
:cities
|
||||
{:falkirk
|
||||
{:stock
|
||||
{:iron 20
|
||||
:whisky 50}}}})
|
||||
actual (select-cargo :fiona world)]
|
||||
(is (= (:origin actual) :falkirk)
|
||||
"Fiona is in Falkirk, so her plan must originate there")
|
||||
(is (= (:commodity actual) :whisky)
|
||||
"Whisky has the higher profit, so plan must carry whisky")
|
||||
(is (= (:destination actual) :aberdeen)
|
||||
"Fiona believes Aberdeen offers the best price for whisky, so should go there")
|
||||
(is (= (:quantity actual) 50)
|
||||
"Fiona can carry 100 units of whisky, but only 50 are available.")
|
||||
(is (= (:expected-profit actual) 150)))))
|
||||
Loading…
Add table
Add a link
Reference in a new issue