From 08ee3118758eba6695d1711b85f3a623f4947425 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sun, 18 Oct 2020 20:48:14 -0700 Subject: [PATCH] journal: fix error when P directive has a zero price (#1373) --- hledger-lib/Hledger/Data/Valuation.hs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/hledger-lib/Hledger/Data/Valuation.hs b/hledger-lib/Hledger/Data/Valuation.hs index 57b3f7e11..a0cd3dec5 100644 --- a/hledger-lib/Hledger/Data/Valuation.hs +++ b/hledger-lib/Hledger/Data/Valuation.hs @@ -44,6 +44,7 @@ import Safe (headMay) import Hledger.Utils import Hledger.Data.Types import Hledger.Data.Amount +import Hledger.Data.Dates (nulldate) ------------------------------------------------------------------------------ @@ -380,7 +381,8 @@ effectiveMarketPrices declaredprices inferredprices = & nubSortBy (compare `on` (\(MarketPrice{..})->(mpfrom,mpto))) marketPriceReverse :: MarketPrice -> MarketPrice -marketPriceReverse mp@MarketPrice{..} = mp{mpfrom=mpto, mpto=mpfrom, mprate=1/mprate} +marketPriceReverse mp@MarketPrice{..} = + mp{mpfrom=mpto, mpto=mpfrom, mprate=if mprate==0 then 0 else 1/mprate} -- PARTIAL: / ------------------------------------------------------------------------------ -- fgl helpers @@ -407,8 +409,21 @@ pathEdges p = [(f,t) | f:t:_ <- tails p] nodesEdgeLabel :: Ord b => Gr a b -> (Node, Node) -> Maybe b nodesEdgeLabel g (from,to) = headMay $ sort [l | (_,t,l) <- out g from, t==to] +nullmarketprice :: MarketPrice +nullmarketprice = MarketPrice { + mpdate=nulldate + ,mpfrom="" + ,mpto="" + ,mprate=0 + } + ------------------------------------------------------------------------------ tests_Valuation = tests "Valuation" [ tests_priceLookup + ,test "marketPriceReverse" $ do + marketPriceReverse nullmarketprice{mprate=2} @?= nullmarketprice{mprate=0.5} + marketPriceReverse nullmarketprice @?= nullmarketprice -- the reverse of a 0 price is a 0 price + + ]