# http://hledger.org/journal.html#market-prices
# http://hledger.org/hledger.html#market-value
# 1. Market prices are ignored by -B.
<
P 2011/01/01 € $1.35
2011/01/01
    expenses:foreign       €100
    assets
$ hledger -f- bal -NB
               €-100  assets
                €100  expenses:foreign
# 2. Market prices are used by bal -V. 
# Market prices for other commodities are not used.
# Nor are transaction prices.
<
P 2011/01/01 € $1.35
P 2011/01/01 GBP $1.35
2011/01/01
    (expenses:foreign)       €100 @ $1.20
$ hledger -f- bal -N -V
             $135.00  expenses:foreign
# 3. The location of price directives does not matter.
# If multiple directives have the same date, the last parsed is used.
<
3000/01/01
  (a)    $100
P 2000/1/1 $ €1.35
3000/03/03
  (b)    $100
P 2000/1/1 $ €1.30
$ hledger -f- bal -N -V a
             €130.00  a
# 4. Market prices in the future are ignored when the valuation date
# is today, which is the default with -V. #453, #683
<
P 2000/1/1 $ €1.20
P 3000/1/1 $ €1.30
3000/01/01
  (a)    $100
$ hledger -f- bal -N -V
             €120.00  a
# 5. Market prices in the future are not ignored when they are before
# the valuation date set with an explicit report end date, as in 
# hledger 1.14 and older, and Ledger. See also valuation2.test, #1083
<
P 3000/1/1 $ €1.10
3000/01/01
  (a)    $100
$ hledger -f- bal -N -V -e 3000/2
             €110.00  a
# 6. Market prices interact with D directives and with amount style canonicalisation. #131
<
D 1000.00 H                ; declare a default commodity named H
P 2015/08/15 EEEE  41.66   ; default commodity H is used for these market prices
P 2015/08/15 FFFF  74.62
P 2015/08/15 GGGG  32.39
2015/08/15
    a  2.4120 EEEE @@ 100  ; default commodity H is used for these transaction prices
    a  0.3350 FFFF @@ 25
    a  0.7718 GGGG @@ 25
    b                      ; implicit balancing amount is in the cost commodity, H
$ hledger -f- balance -V
            150.48 H  a
           -150.00 H  b
--------------------
              0.48 H
# 7. register -V affects posting amounts and total.
<
P 2000/1/1 $ €1.20
2000/1/1
  (a)    $100
$ hledger -f- reg -V
2000-01-01                      (a)                        €120.00       €120.00
# 8. print -V affects posting amounts but not balance assertions.
<
P 2000/1/1 $ €1.20
2000/1/1
  (a)    $100 = $100
$ hledger -f- print -V
2000-01-01
    (a)         €120.00 = $100
>=0
# --value tests
<
P 2000/01/01 A  1 B
P 2000/01/15 A  5 B
P 2000/02/01 A  2 B
P 2000/03/01 A  3 B
P 2000/04/01 A  4 B
2000/01/01
  (a)      1 A @ 6 B
2000/02/01
  (a)      1 A @ 7 B
2000/03/01
  (a)      1 A @ 8 B
# print
# 9. print costs using transaction prices
$ hledger -f- print --value=cost
2000-01-01
    (a)             6 B
2000-02-01
    (a)             7 B
2000-03-01
    (a)             8 B
>=0
# 10. print value using market prices on each transaction's (posting's) date
$ hledger -f- print --value=then
2000-01-01
    (a)             1 B
2000-02-01
    (a)             2 B
2000-03-01
    (a)             3 B
>=0
# 11. print value using prices on last day of report period (2000-02-29)
$ hledger -f- print --value=end date:2000/01-2000/03
2000-01-01
    (a)             2 B
2000-02-01
    (a)             2 B
>=0
# 12. print value using prices on last day of report period (no period specified)
# specified - uses last day of journal (2000-03-01)
$ hledger -f- print --value=end
2000-01-01
    (a)             3 B
2000-02-01
    (a)             3 B
2000-03-01
    (a)             3 B
>=0
# 13. print value using prices on a specified date
$ hledger -f- print --value=2000-01-15
2000-01-01
    (a)             5 B
2000-02-01
    (a)             5 B
2000-03-01
    (a)             5 B
>=0
# 14. print value using prices today
# (assuming today's date is >= 2000-04-01)
$ hledger -f- print --value=now
2000-01-01
    (a)             4 B
2000-02-01
    (a)             4 B
2000-03-01
    (a)             4 B
>=0
# register
# 15. register report valued at cost.
$ hledger -f- reg --value=cost
2000-01-01                      (a)                            6 B           6 B
2000-02-01                      (a)                            7 B          13 B
2000-03-01                      (a)                            8 B          21 B
 
# 16. register report valued at posting dates
$ hledger -f- reg --value=then
2000-01-01                      (a)                            1 B           1 B
2000-02-01                      (a)                            2 B           3 B
2000-03-01                      (a)                            3 B           6 B
# 17. register report valued at period end
$ hledger -f- reg --value=end
2000-01-01                      (a)                            3 B           3 B
2000-02-01                      (a)                            3 B           6 B
2000-03-01                      (a)                            3 B           9 B
# 18. register report valued at specified date
$ hledger -f- reg --value=2000-01-15
2000-01-01                      (a)                            5 B           5 B
2000-02-01                      (a)                            5 B          10 B
2000-03-01                      (a)                            5 B          15 B
# 19. register report valued today
$ hledger -f- reg --value=now
2000-01-01                      (a)                            4 B           4 B
2000-02-01                      (a)                            4 B           8 B
2000-03-01                      (a)                            4 B          12 B
# 20. single-period register report valued at default date (same as --value=now)
$ hledger -f- reg -V
2000-01-01                      (a)                            4 B           4 B
2000-02-01                      (a)                            4 B           8 B
2000-03-01                      (a)                            4 B          12 B
# register with -H (starting balance)
# 21. register with starting balance, valued at cost.
$ hledger -f- reg --value=cost -b 200002 -H
2000-02-01                      (a)                            7 B          13 B
2000-03-01                      (a)                            8 B          21 B
 
# 22. register with starting balance, valued at period end.
# That is unspecified so the last posting date is used, ie 2000/3/1, so the price is 3 B.
# Starting balance is 5 B as above.
$ hledger -f- reg --value=end -b 200002 -H
2000-02-01                      (a)                            3 B           8 B
2000-03-01                      (a)                            3 B          11 B
# 23. register with starting balance, valued at specified date (when the price is 5 B).
# Starting balance is 5 B as above.
$ hledger -f- reg --value=2000-01-15 -b 200002 -H
2000-02-01                      (a)                            5 B          10 B
2000-03-01                      (a)                            5 B          15 B
# register, periodic
# 24. periodic register report valued at cost.
# The total for january is 6 B (1 A valued at 1/1, price 1 B, and 1 A
# valued at 1/20, price 5 B).
# Need an extra transaction for this test:
<
P 2000/01/01 A  1 B
P 2000/01/15 A  5 B
P 2000/02/01 A  2 B
P 2000/03/01 A  3 B
P 2000/04/01 A  4 B
2000/01/01
  (a)      1 A @ 6 B
2000/01/20
  (a)      1 A @ 7 B
2000/02/01
  (a)      1 A @ 8 B
2000/03/01
  (a)      1 A @ 9 B
$ hledger -f- reg --value=cost -M
2000-01                 a                                     13 B          13 B
2000-02                 a                                      8 B          21 B
2000-03                 a                                      9 B          30 B
 
# back to the original test journal:
<
P 2000/01/01 A  1 B
P 2000/01/15 A  5 B
P 2000/02/01 A  2 B
P 2000/03/01 A  3 B
P 2000/04/01 A  4 B
2000/01/01
  (a)      1 A @ 6 B
2000/02/01
  (a)      1 A @ 7 B
2000/03/01
  (a)      1 A @ 8 B
# 25. periodic register report valued at period end
$ hledger -f- reg --value=end -M
2000-01                 a                                      5 B           5 B
2000-02                 a                                      2 B           7 B
2000-03                 a                                      3 B          10 B
# 26. periodic register report valued at specified date
$ hledger -f- reg --value=2000-01-15 -M
2000-01                 a                                      5 B           5 B
2000-02                 a                                      5 B          10 B
2000-03                 a                                      5 B          15 B
# 27. periodic register report valued today
$ hledger -f- reg --value=now -M
2000-01                 a                                      4 B           4 B
2000-02                 a                                      4 B           8 B
2000-03                 a                                      4 B          12 B
# 28. periodic register report valued at default date (same as --value=end)
$ hledger -f- reg -V -M
2000-01                 a                                      5 B           5 B
2000-02                 a                                      2 B           7 B
2000-03                 a                                      3 B          10 B
# balance
# 29. single column balance report valued at cost
$ hledger -f- bal -N --value=cost
                21 B  a
 
# 30. single column balance report valued at period end
$ hledger -f- bal -N --value=end
                 9 B  a
# 31. single column balance report valued at specified date
$ hledger -f- bal -N --value=2000-01-15
                15 B  a
# 32. single column balance report valued today
$ hledger -f- bal -N --value=now
                12 B  a
# 33. single column balance report valued at default date (same as --value=now)
$ hledger -f- bal -N -V
                12 B  a
# balance, periodic
# 34. multicolumn balance report valued at cost
$ hledger -f- bal -MTA --value=cost
Balance changes in 2000Q1, valued at cost:
   || Jan  Feb  Mar    Total  Average 
===++=================================
 a || 6 B  7 B  8 B     21 B      7 B 
---++---------------------------------
   || 6 B  7 B  8 B     21 B      7 B 
# 35. multicolumn balance report showing changes in period-end values
$ hledger -f- bal -M --value=end
Period-end value changes in 2000Q1:
   || Jan   Feb  Mar 
===++================
 a || 5 B  -1 B  5 B 
---++----------------
   || 5 B  -1 B  5 B 
# 36. multicolumn balance report showing changes in period-end values with -T or -A
$ hledger -f- bal -MTA --value=end
Period-end value changes in 2000Q1:
   || Jan   Feb  Mar    Total  Average 
===++==================================
 a || 5 B  -1 B  5 B      9 B      3 B 
---++----------------------------------
   || 5 B  -1 B  5 B      9 B      3 B 
# 37. multicolumn balance report valued at other date
$ hledger -f- bal -MTA --value=2000-01-15
Balance changes in 2000Q1, valued at 2000-01-15:
   || Jan  Feb  Mar    Total  Average 
===++=================================
 a || 5 B  5 B  5 B     15 B      5 B 
---++---------------------------------
   || 5 B  5 B  5 B     15 B      5 B 
# 38. multicolumn balance report valued today (with today >= 2000-04-01)
$ hledger -f- bal -M --value=now
Balance changes in 2000Q1, current value:
   || Jan  Feb  Mar 
===++===============
 a || 4 B  4 B  4 B 
---++---------------
   || 4 B  4 B  4 B 
# 39. multicolumn balance report showing changes in period-end values (same as --value=end)
$ hledger -f- bal -M -V
Period-end value changes in 2000Q1:
   || Jan   Feb  Mar 
===++================
 a || 5 B  -1 B  5 B 
---++----------------
   || 5 B  -1 B  5 B 
# balance, periodic, with -H (starting balance and accumulating across periods)
# 40. multicolumn balance report with -H, valued at cost.
# The starting balance on 2000/01/01 is 6 B (cost of the first 2 A).
# February adds 1 A costing 7 B, making 13 B.
# March adds 1 A costing 8 B, making 21 B.
$ hledger -f- bal -M -H -b 200002 --value=cost
Ending balances (historical) in 2000-02-01..2000-03-31, valued at cost:
   || 2000-02-29  2000-03-31 
===++========================
 a ||       13 B        21 B 
---++------------------------
   ||       13 B        21 B 
 
# 41. multicolumn balance report with -H valued at period end.
# The starting balance is 1 A.
# February adds 1 A making 2 A, which is valued at 2000/02/29 as 4 B.
# March adds 1 A making 3 A, which is valued at 2000/03/31 as 9 B.
$ hledger -f- bal -MA -H -b 200002 --value=end
Ending balances (historical) in 2000-02-01..2000-03-31, valued at period ends:
   || 2000-02-29  2000-03-31  Average 
===++=================================
 a ||        4 B         9 B      6 B 
---++---------------------------------
   ||        4 B         9 B      6 B 
# 42. multicolumn balance report with -H valued at other date.
# The starting balance is 5 B (1 A valued at 2000/1/15).
$ hledger -f- bal -M -H -b 200002 --value=2000-01-15
Ending balances (historical) in 2000-02-01..2000-03-31, valued at 2000-01-15:
   || 2000-02-29  2000-03-31 
===++========================
 a ||       10 B        15 B 
---++------------------------
   ||       10 B        15 B 
# 43. multicolumn balance report with -H, valuing each period's carried-over balances at cost.
<
P 2000/01/01 A  1 B
P 2000/01/15 A  5 B
P 2000/02/01 A  2 B
P 2000/03/01 A  3 B
P 2000/04/01 A  4 B
2000/01/01
  (a)      1 A @ 6 B
$ hledger -f- bal -ME -H -p200001-200004 --value=c
Ending balances (historical) in 2000Q1, valued at cost:
   || 2000-01-31  2000-02-29  2000-03-31 
===++====================================
 a ||        6 B         6 B         6 B 
---++------------------------------------
   ||        6 B         6 B         6 B 
# 44. multicolumn balance report with -H, valuing each period's carried-over balances at period end.
# Unrelated, also -H always disables -T.
$ hledger -f- bal -META -H -p200001-200004 --value=e
Ending balances (historical) in 2000Q1, valued at period ends:
   || 2000-01-31  2000-02-29  2000-03-31  Average 
===++=============================================
 a ||        5 B         2 B         3 B      3 B 
---++---------------------------------------------
   ||        5 B         2 B         3 B      3 B 
# 45. multicolumn balance report with -H, valuing each period's carried-over balances at other date.
$ hledger -f- bal -ME -H -p200001-200004 --value=2000-01-15
Ending balances (historical) in 2000Q1, valued at 2000-01-15:
   || 2000-01-31  2000-02-29  2000-03-31 
===++====================================
 a ||        5 B         5 B         5 B 
---++------------------------------------
   ||        5 B         5 B         5 B 
# balance --budget. The periodic transactions setting budget amounts
# are valued in the same way as ordinary transactions.
<
P 2000/01/01 A  1 B
P 2000/01/15 A  5 B
P 2000/02/01 A  2 B
P 2000/03/01 A  3 B
P 2000/04/01 A  4 B
~ monthly
  (a)  2 A @ 1 B
2000/01/01
  (a)      1 A @ 6 B
2000/02/01
  (a)      1 A @ 7 B
2000/03/01
  (a)      1 A @ 8 B
# 46. budget report, unvalued (for reference).
$ hledger -f- bal -M --budget
Budget performance in 2000Q1:
   ||              Jan               Feb               Mar 
===++======================================================
 a || 1 A [50% of 2 A]  1 A [50% of 2 A]  1 A [50% of 2 A] 
---++------------------------------------------------------
   || 1 A [50% of 2 A]  1 A [50% of 2 A]  1 A [50% of 2 A] 
# 47. budget report, valued at cost. 
$ hledger -f- bal -MTA --budget --value=c
Budget performance in 2000Q1, valued at cost:
   ||               Jan                Feb                Mar               Total            Average 
===++================================================================================================
 a || 6 B [300% of 2 B]  7 B [350% of 2 B]  8 B [400% of 2 B]  21 B [350% of 6 B]  7 B [350% of 2 B] 
---++------------------------------------------------------------------------------------------------
   || 6 B [300% of 2 B]  7 B [350% of 2 B]  8 B [400% of 2 B]  21 B [350% of 6 B]  7 B [350% of 2 B] 
# 48. budget report, showing changes in period-end values.
$ hledger -f- bal -MTA --budget --value=e
Budget performance in 2000Q1, valued at period ends:
   ||               Jan                 Feb                Mar              Total           Average 
===++===============================================================================================
 a || 5 B [50% of 10 B]  -1 B [50% of -2 B]  5 B [50% of 10 B]  9 B [50% of 18 B]  3 B [50% of 6 B] 
---++-----------------------------------------------------------------------------------------------
   || 5 B [50% of 10 B]  -1 B [50% of -2 B]  5 B [50% of 10 B]  9 B [50% of 18 B]  3 B [50% of 6 B] 
# 49. budget report, valued at other date.
$ hledger -f- bal -MTA --budget --value=2000-01-15
Budget performance in 2000Q1, valued at 2000-01-15:
   ||               Jan                Feb                Mar               Total            Average 
===++================================================================================================
 a || 5 B [50% of 10 B]  5 B [50% of 10 B]  5 B [50% of 10 B]  15 B [50% of 30 B]  5 B [50% of 10 B] 
---++------------------------------------------------------------------------------------------------
   || 5 B [50% of 10 B]  5 B [50% of 10 B]  5 B [50% of 10 B]  15 B [50% of 30 B]  5 B [50% of 10 B] 
# 50. --value=then with --historical. How is the starting total valued ?
# Currently not supported.
<
P 2020-01-01 A 1 B
P 2020-02-01 A 2 B
P 2020-03-01 A 3 B
P 2020-04-01 A 4 B
2020-01-01
   (a)  1 A
2020-02-01
   (a)  1 A
2020-03-01
   (a)  1 A
2020-04-01
   (a)  1 A
$ hledger -f- reg --value=then -b 2020-03 -H
>2 /not yet supported/
>=1
# 51. --value=then with a report interval. How are the summary amounts valued ?
# Currently each interval's unvalued sum is valued on its first day.
<
P 2020-01-01 A 1 B
P 2020-02-01 A 2 B
P 2020-03-01 A 3 B
P 2020-04-01 A 4 B
2020-01-01
   (a)  1 A
2020-02-01
   (a)  1 A
2020-03-01
   (a)  1 A
2020-04-01
   (a)  1 A
$ hledger -f- reg --value=then -Q
2020Q1                  a                                      3 B           3 B
2020Q2                  a                                      4 B           7 B
>=0
# 52. print --value should affect all postings, including when there's an implicit transaction price
<
P 2020-01-01 A 1 C
P 2020-01-01 B 1 C
2020-01-01
   a   1 A
   b  -1 B
$ hledger -f- print -V
2020-01-01
    a             1 C
    b            -1 C
>=0