dev: lib: Hledger.Data.Amount: drop amount, use nullamt always
				
					
				
			This commit is contained in:
		
							parent
							
								
									c80c72d7cd
								
							
						
					
					
						commit
						bfb632dd8e
					
				| @ -49,7 +49,6 @@ module Hledger.Data.Amount ( | |||||||
|   isNonsimpleCommodityChar, |   isNonsimpleCommodityChar, | ||||||
|   quoteCommoditySymbolIfNeeded, |   quoteCommoditySymbolIfNeeded, | ||||||
|   -- * Amount |   -- * Amount | ||||||
|   amount, |  | ||||||
|   nullamt, |   nullamt, | ||||||
|   missingamt, |   missingamt, | ||||||
|   num, |   num, | ||||||
| @ -255,24 +254,23 @@ instance Num Amount where | |||||||
|     (-)                          = similarAmountsOp (-) |     (-)                          = similarAmountsOp (-) | ||||||
|     (*)                          = similarAmountsOp (*) |     (*)                          = similarAmountsOp (*) | ||||||
| 
 | 
 | ||||||
| -- TODO: amount, num are clashy |  | ||||||
| -- | The empty simple amount. | -- | The empty simple amount. | ||||||
| amount, nullamt :: Amount | nullamt :: Amount | ||||||
| amount = Amount{acommodity="", aquantity=0, aprice=Nothing, astyle=amountstyle} | nullamt = Amount{acommodity="", aquantity=0, aprice=Nothing, astyle=amountstyle} | ||||||
| nullamt = amount |  | ||||||
| 
 | 
 | ||||||
| -- | A temporary value for parsed transactions which had no amount specified. | -- | A temporary value for parsed transactions which had no amount specified. | ||||||
| missingamt :: Amount | missingamt :: Amount | ||||||
| missingamt = amount{acommodity="AUTO"} | missingamt = nullamt{acommodity="AUTO"} | ||||||
| 
 | 
 | ||||||
| -- Handy amount constructors for tests. | -- Handy amount constructors for tests. | ||||||
| -- usd/eur/gbp round their argument to a whole number of pennies/cents. | -- usd/eur/gbp round their argument to a whole number of pennies/cents. | ||||||
| num n = amount{acommodity="",  aquantity=n} | -- XXX these are a bit clashy | ||||||
| hrs n = amount{acommodity="h", aquantity=n,           astyle=amountstyle{asprecision=Precision 2, ascommodityside=R}} | num n = nullamt{acommodity="",  aquantity=n} | ||||||
| usd n = amount{acommodity="$", aquantity=roundTo 2 n, astyle=amountstyle{asprecision=Precision 2}} | hrs n = nullamt{acommodity="h", aquantity=n,           astyle=amountstyle{asprecision=Precision 2, ascommodityside=R}} | ||||||
| eur n = amount{acommodity="€", aquantity=roundTo 2 n, astyle=amountstyle{asprecision=Precision 2}} | usd n = nullamt{acommodity="$", aquantity=roundTo 2 n, astyle=amountstyle{asprecision=Precision 2}} | ||||||
| gbp n = amount{acommodity="£", aquantity=roundTo 2 n, astyle=amountstyle{asprecision=Precision 2}} | eur n = nullamt{acommodity="€", aquantity=roundTo 2 n, astyle=amountstyle{asprecision=Precision 2}} | ||||||
| per n = amount{acommodity="%", aquantity=n,           astyle=amountstyle{asprecision=Precision 1, ascommodityside=R, ascommodityspaced=True}} | gbp n = nullamt{acommodity="£", aquantity=roundTo 2 n, astyle=amountstyle{asprecision=Precision 2}} | ||||||
|  | per n = nullamt{acommodity="%", aquantity=n,           astyle=amountstyle{asprecision=Precision 1, ascommodityside=R, ascommodityspaced=True}} | ||||||
| amt `at` priceamt = amt{aprice=Just $ UnitPrice priceamt} | amt `at` priceamt = amt{aprice=Just $ UnitPrice priceamt} | ||||||
| amt @@ priceamt = amt{aprice=Just $ TotalPrice priceamt} | amt @@ priceamt = amt{aprice=Just $ TotalPrice priceamt} | ||||||
| 
 | 
 | ||||||
| @ -287,7 +285,7 @@ similarAmountsOp :: (Quantity -> Quantity -> Quantity) -> Amount -> Amount -> Am | |||||||
| similarAmountsOp op Amount{acommodity=_,  aquantity=q1, astyle=AmountStyle{asprecision=p1}} | similarAmountsOp op Amount{acommodity=_,  aquantity=q1, astyle=AmountStyle{asprecision=p1}} | ||||||
|                     Amount{acommodity=c2, aquantity=q2, astyle=s2@AmountStyle{asprecision=p2}} = |                     Amount{acommodity=c2, aquantity=q2, astyle=s2@AmountStyle{asprecision=p2}} = | ||||||
|    -- trace ("a1:"++showAmountDebug a1) $ trace ("a2:"++showAmountDebug a2) $ traceWith (("= :"++).showAmountDebug) |    -- trace ("a1:"++showAmountDebug a1) $ trace ("a2:"++showAmountDebug a2) $ traceWith (("= :"++).showAmountDebug) | ||||||
|    amount{acommodity=c2, aquantity=q1 `op` q2, astyle=s2{asprecision=max p1 p2}} |    nullamt{acommodity=c2, aquantity=q1 `op` q2, astyle=s2{asprecision=max p1 p2}} | ||||||
|   --  c1==c2 || q1==0 || q2==0 = |   --  c1==c2 || q1==0 || q2==0 = | ||||||
|   --  otherwise = error "tried to do simple arithmetic with amounts in different commodities" |   --  otherwise = error "tried to do simple arithmetic with amounts in different commodities" | ||||||
| 
 | 
 | ||||||
| @ -982,7 +980,7 @@ tests_Amount = testGroup "Amount" [ | |||||||
|        amountCost (eur (-1)){aprice=Just $ TotalPrice $ usd (-2)} @?= usd (-2) |        amountCost (eur (-1)){aprice=Just $ TotalPrice $ usd (-2)} @?= usd (-2) | ||||||
| 
 | 
 | ||||||
|     ,testCase "amountLooksZero" $ do |     ,testCase "amountLooksZero" $ do | ||||||
|        assertBool "" $ amountLooksZero amount |        assertBool "" $ amountLooksZero nullamt | ||||||
|        assertBool "" $ amountLooksZero $ usd 0 |        assertBool "" $ amountLooksZero $ usd 0 | ||||||
| 
 | 
 | ||||||
|     ,testCase "negating amounts" $ do |     ,testCase "negating amounts" $ do | ||||||
|  | |||||||
| @ -193,7 +193,7 @@ amountValueAtDate priceoracle styles mto d a = | |||||||
|                                       -- Make default display style use precision 2 instead of 0 ? |                                       -- Make default display style use precision 2 instead of 0 ? | ||||||
|                                       -- Leave as is for now; mentioned in manual. |                                       -- Leave as is for now; mentioned in manual. | ||||||
|       styleAmount styles |       styleAmount styles | ||||||
|       amount{acommodity=comm, aquantity=rate * aquantity a} |       nullamt{acommodity=comm, aquantity=rate * aquantity a} | ||||||
| 
 | 
 | ||||||
| -- | Calculate the gain of each component amount, that is the difference | -- | Calculate the gain of each component amount, that is the difference | ||||||
| -- between the valued amount and the value of the cost basis (see | -- between the valued amount and the value of the cost basis (see | ||||||
|  | |||||||
| @ -1480,24 +1480,24 @@ tests_Common = testGroup "Common" [ | |||||||
|    ,testCase "unit price"             $ assertParseEq amountp "$10 @ €0.5" |    ,testCase "unit price"             $ assertParseEq amountp "$10 @ €0.5" | ||||||
|       -- not precise enough: |       -- not precise enough: | ||||||
|       -- (usd 10 `withPrecision` 0 `at` (eur 0.5 `withPrecision` 1)) -- `withStyle` asdecimalpoint=Just '.' |       -- (usd 10 `withPrecision` 0 `at` (eur 0.5 `withPrecision` 1)) -- `withStyle` asdecimalpoint=Just '.' | ||||||
|       amount{ |       nullamt{ | ||||||
|          acommodity="$" |          acommodity="$" | ||||||
|         ,aquantity=10 -- need to test internal precision with roundTo ? I think not |         ,aquantity=10 -- need to test internal precision with roundTo ? I think not | ||||||
|         ,astyle=amountstyle{asprecision=Precision 0, asdecimalpoint=Nothing} |         ,astyle=amountstyle{asprecision=Precision 0, asdecimalpoint=Nothing} | ||||||
|         ,aprice=Just $ UnitPrice $ |         ,aprice=Just $ UnitPrice $ | ||||||
|           amount{ |           nullamt{ | ||||||
|              acommodity="€" |              acommodity="€" | ||||||
|             ,aquantity=0.5 |             ,aquantity=0.5 | ||||||
|             ,astyle=amountstyle{asprecision=Precision 1, asdecimalpoint=Just '.'} |             ,astyle=amountstyle{asprecision=Precision 1, asdecimalpoint=Just '.'} | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|    ,testCase "total price"            $ assertParseEq amountp "$10 @@ €5" |    ,testCase "total price"            $ assertParseEq amountp "$10 @@ €5" | ||||||
|       amount{ |       nullamt{ | ||||||
|          acommodity="$" |          acommodity="$" | ||||||
|         ,aquantity=10 |         ,aquantity=10 | ||||||
|         ,astyle=amountstyle{asprecision=Precision 0, asdecimalpoint=Nothing} |         ,astyle=amountstyle{asprecision=Precision 0, asdecimalpoint=Nothing} | ||||||
|         ,aprice=Just $ TotalPrice $ |         ,aprice=Just $ TotalPrice $ | ||||||
|           amount{ |           nullamt{ | ||||||
|              acommodity="€" |              acommodity="€" | ||||||
|             ,aquantity=5 |             ,aquantity=5 | ||||||
|             ,astyle=amountstyle{asprecision=Precision 0, asdecimalpoint=Nothing} |             ,astyle=amountstyle{asprecision=Precision 0, asdecimalpoint=Nothing} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user