hledger/tests/journal/precision.test
Simon Michael 5c09553481 lib: keep amounts aligned when rendering a transaction with posting flags
Related to #563, when rendering a transaction, we reserve two more chars
of width so that amounts remain aligned when there are posting flags.
Affects hledger-ui's transaction screen, print, hledger-rewrite etc.
2017-06-04 21:26:18 -07:00

163 lines
4.0 KiB
Plaintext

# http://code.google.com/p/hledger/issues/detail?id=23
#
# 1. original test case, this should balance since price precisions do
# not affect the canonical display precisions used for display and balancing
hledger -f - print
<<<
2010/1/1 x
A 55.3653 C @ 30.92189512 D
A -1712 D
>>>
2010/01/01 x
A 55.3653 C @ 30.92189512 D
A -1712 D
>>>=0
## 1b. here $'s canonical display precision should be 2 not 4
## XXX no, because the inferred amount $1.0049 is observed
# hledger -f - print --cost
# <<<
# 2010/1/1
# a $0.00
# a 1C @ $1.0049
# a
# >>>
# 2010/01/01
# a 0
# a $1.00
# a $-1.00
#
# >>>=0
# 2. and here the price should be printed with its original precision, not
# the canonical display precision
hledger -f - print --explicit
<<<
2010/1/1
a $0.00
a 1C @ $1.0049
a
>>>
2010/01/01
a 0
a 1C @ $1.0049
a $-1.0049
>>>=0
# 3. with $'s display precision at 3 or more, this txn should not balance.
# The error message shows the difference with full precision.
hledger -f - balance --no-total --cost --empty
<<<
2010/1/1
a 1C @ $1.0049
a $-1.000
>>>2 /off by \$0.0049/
>>>= 1
# 4. with $'s display precision at 2 or less, this txn should balance
hledger -f - balance --no-total --cost --empty
<<<
2010/1/1
a 1C @ $1.0049
a $-1.00
>>>
0 a
>>>=0
# 5. avamk's 2011/1/19 example
hledger -f - balance --cost
<<<
2001/01/01 * ACME fund
assets:investment:ACME 203.890 ACME @ $16.02
equity:opening balances
>>>
$3266.32 assets:investment:ACME
$-3266.32 equity:opening balances
--------------------
0
>>>=0
# hledger 0.14pre: precision=2, presumably from price
# $3266.32 assets:investment:ACME
# $-3266.32 equity:opening balances
#--------------------
# $0.00
#
# ledger "2.6.0.90" with -s: full precision, ignores price
# $3266.3178 assets:investment:ACME
# $-3266.3178 equity:opening balances
#
# ledger 3: precision=0, uses default, ignores price
# $3266 assets:investment:ACME
# $-3266 equity:opening balances
#--------------------
# 0
## 6. with a default commodity.. XXX should observe it
hledger -f - balance --cost
<<<
D $1000.0
2001/01/01 * ACME fund
assets:investment:ACME 203.890 ACME @ $16.02
equity:opening balances
>>>
$3266.32 assets:investment:ACME
$-3266.32 equity:opening balances
--------------------
0
>>>=0
### hledger 0.14pre: precision=2, presumably from price, ignores D
### $3266.32 assets:investment:ACME
### $-3266.32 equity:opening balances
###--------------------
### $0.00
###
### ledger "2.6.0.90" with -s: full precision, ignores price and D
### $3266.3178 assets:investment:ACME
### $-3266.3178 equity:opening balances
###
### ledger 3: precision=1, ignores price, observes D
### $3266.3 assets:investment:ACME
### $-3266.3 equity:opening balances
###--------------------
### 0
#
# 7. when there are multiple postings in the commodity being priced,
# show the averaged unit price, with precision equal to the sum of
# the max precisions of the commodities being converted (#262).
# Here the (irrational) price should be displayed with just precision 4
# (C's precision 2 + D's precision 2).
hledger -f- print --explicit
<<<
2015/1/1
c C 10.00
c C 11.00
d D -320.00
>>>
2015/01/01
c C 10.00 @ D 15.2381
c C 11.00 @ D 15.2381
d D -320.00
>>>=0
## 8. Here the price should be displayed with precision 7
# (E's precision 4 + F's precision 3).
hledger -f- print --explicit
<<<
2015/1/1
e E 10.0000
e E 11
f F -320.000
>>>
2015/01/01
e E 10.0000 @ F 15.2380952
e E 11.0000 @ F 15.2380952
f F -320.000
>>>=0