451 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			451 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env shelltest
 | 
						|
# balance assertion & balance assignment tests
 | 
						|
 | 
						|
# 1. test some balance assertions
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  a    $1  =$1
 | 
						|
  b        =-$1
 | 
						|
 | 
						|
2013/1/2
 | 
						|
  a    $1  =$2
 | 
						|
  b   $-1  =$-2
 | 
						|
 | 
						|
2013/1/3
 | 
						|
  a    $1  = $3
 | 
						|
  b   $-1  = $-3
 | 
						|
  (b)  $1  = $-2
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 2. same entries as 1 but different parse order, assertion should still pass based on date
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  a    $1  =$1
 | 
						|
  b        =-$1
 | 
						|
 | 
						|
2013/1/3
 | 
						|
  a    $1  = $3
 | 
						|
  b   $-1  = $-3
 | 
						|
  (b)  $1  = $-2
 | 
						|
 | 
						|
2013/1/2
 | 
						|
  a    $1  =$2
 | 
						|
  b   $-1  =$-2
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 3. like 1 but switch order of postings in last entry,
 | 
						|
# assertion should fail and exit code should be non zero
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  a    $1  =$1
 | 
						|
  b        =-$1
 | 
						|
 | 
						|
2013/1/2
 | 
						|
  a    $1  =$2
 | 
						|
  b   $-1  =$-2
 | 
						|
 | 
						|
2013/1/3
 | 
						|
  a    $1  = $3
 | 
						|
  (b)  $1  = $-2
 | 
						|
  b   $-1  = $-3
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
>2 /balance assertion.*line 11, column 12/
 | 
						|
>=1
 | 
						|
 | 
						|
# 4. should also work without commodity symbols
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  (a)    1  =1
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 5. should work for fractional amount with trailing zeros
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  a    $1.20  =$1.20
 | 
						|
  b           =-$1.20
 | 
						|
 | 
						|
2013/1/2
 | 
						|
  a    $0.10  =$1.3
 | 
						|
  b           =-$1.3
 | 
						|
 | 
						|
2013/1/3
 | 
						|
  a    $0.7   =$2
 | 
						|
  b           =-$2
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 6. assertions currently check only a single commodity's balance, like Ledger
 | 
						|
<
 | 
						|
1/2
 | 
						|
  (a)  A1
 | 
						|
  (a)  B1 = A1
 | 
						|
  (a)  0  = A1
 | 
						|
  (a)  C0 = D0
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 7. balances should accumulate (#195)
 | 
						|
<
 | 
						|
1/1
 | 
						|
    (a)   1F = 1F
 | 
						|
    (a)   2G = 2G
 | 
						|
 | 
						|
1/2
 | 
						|
    (a)   3F = 4F
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> !/assertion failed/
 | 
						|
>=0
 | 
						|
 | 
						|
# 8. what should happen here ? Currently,
 | 
						|
# in a, 3.4 EUR @@ $5.6 and -3.4 EUR cancel out (wrong ?)
 | 
						|
# in b, 
 | 
						|
# 
 | 
						|
# <
 | 
						|
# 2013/1/1
 | 
						|
#   a    $1.20
 | 
						|
#   a    3.4 EUR @@ $5.6
 | 
						|
#   b  
 | 
						|
 | 
						|
# 2013/1/2
 | 
						|
#   a    -3.4 EUR
 | 
						|
#   b
 | 
						|
 | 
						|
# 2013/1/3
 | 
						|
#   a    $0.1   =$1.30
 | 
						|
#   b           =-$1.30
 | 
						|
 | 
						|
# $ hledger -f - stats
 | 
						|
# > /Transactions/
 | 
						|
# >=0
 | 
						|
 | 
						|
# 8. Using balance assignment to set balances.
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  a    $1.20
 | 
						|
  b
 | 
						|
 | 
						|
2013/1/2
 | 
						|
  a           =$1.3
 | 
						|
  b
 | 
						|
 | 
						|
2013/1/2
 | 
						|
  a           $10 =$11.3
 | 
						|
  b         =$-11.3
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
 | 
						|
# 9. Multiple assertions for an account in the same transaction.
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  a    $1  =$1
 | 
						|
  b        =-$1
 | 
						|
 | 
						|
2013/1/2
 | 
						|
  a    $1  =$2
 | 
						|
  b   $-1  =$-2
 | 
						|
 | 
						|
2013/1/3
 | 
						|
  a    $2  = $4
 | 
						|
  b   $-1  = $-3
 | 
						|
  b   $-1  = $-4
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 10. Multiple assertions and assignments for an account in the same transaction.
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  a    $1  =$1
 | 
						|
  b        =-$1
 | 
						|
 | 
						|
2013/1/3
 | 
						|
  a    $6  = $7
 | 
						|
  b   $-1  = $-2
 | 
						|
  b   $-1  = $-3
 | 
						|
  b   $-7    = $-10
 | 
						|
  b   $-1
 | 
						|
  b   $-1  = $-12
 | 
						|
  b
 | 
						|
 | 
						|
2013/1/4
 | 
						|
  a    $0 = $7
 | 
						|
  b   $0   = $-7
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 11. Assignments and virtual postings
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  b
 | 
						|
  [a]    1$
 | 
						|
  (b)     = $14
 | 
						|
  [b]
 | 
						|
  a      4$
 | 
						|
 | 
						|
 | 
						|
2013/1/2
 | 
						|
  [a]      = $5
 | 
						|
  b        = $9
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
# 12. Having both assignments and posting dates is not supported.
 | 
						|
<
 | 
						|
2013/1/1
 | 
						|
  a    $1  =$1
 | 
						|
  b         =$-1  ; date:2012/1/1
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
>2  /balance assignments may not have a custom date/
 | 
						|
>=1
 | 
						|
 | 
						|
# 13. Posting Date
 | 
						|
<
 | 
						|
 | 
						|
2011/5/5
 | 
						|
  [a]        = -10
 | 
						|
 | 
						|
2013/1/1
 | 
						|
  a    1 = -12
 | 
						|
  b
 | 
						|
  c   = 5
 | 
						|
 | 
						|
2014/1/1
 | 
						|
  a      ; date:2012/1/1
 | 
						|
  d     3 = 3
 | 
						|
 | 
						|
2015/1/1
 | 
						|
  [a]      ; date:2011/1/1
 | 
						|
  [d]    10
 | 
						|
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 14. Mix different commodities
 | 
						|
<
 | 
						|
2016/1/1
 | 
						|
    a      $1
 | 
						|
    b      -1 zorkmids
 | 
						|
 | 
						|
2016/1/2
 | 
						|
    a     $-1 = $0
 | 
						|
    b
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 15. Mix different commodities and assignments
 | 
						|
<
 | 
						|
2016/1/1
 | 
						|
    a      $1
 | 
						|
    b      -1 zorkmids
 | 
						|
 | 
						|
2016/1/4
 | 
						|
    [a]    = $1
 | 
						|
 | 
						|
 | 
						|
2016/1/5
 | 
						|
    [a]    = -1 zorkmids
 | 
						|
 | 
						|
2016/1/2
 | 
						|
    a
 | 
						|
    b      = 0 zorkmids
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 16. Total assertions (==) parse correctly
 | 
						|
<
 | 
						|
2016/1/1
 | 
						|
    a      $1
 | 
						|
    b
 | 
						|
 | 
						|
2016/1/2
 | 
						|
    a         == $1
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 17. Total assertions consider entire multicommodity amount
 | 
						|
<
 | 
						|
2016/1/1
 | 
						|
    a      $1
 | 
						|
    b
 | 
						|
 | 
						|
2016/1/2
 | 
						|
    a       1 zorkmids
 | 
						|
    b
 | 
						|
 | 
						|
2016/1/3
 | 
						|
    a       0 == $1
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
>2 /balance assertion.*line 10, column 15/
 | 
						|
>=1
 | 
						|
 | 
						|
# 18. Mix different commodities and total assignments
 | 
						|
<
 | 
						|
2016/1/1
 | 
						|
    a      $1
 | 
						|
    a      -1 zorkmids
 | 
						|
    b
 | 
						|
 | 
						|
2016/1/2
 | 
						|
    a         == $1
 | 
						|
    b      -1 zorkmids
 | 
						|
 | 
						|
2016/1/3
 | 
						|
    b       0 = $-1
 | 
						|
    b       0 = 0 zorkmids
 | 
						|
 | 
						|
$ hledger -f - stats
 | 
						|
> /Transactions/
 | 
						|
>=0
 | 
						|
 | 
						|
# 19. Balance assertions may have a price, but it's ignored
 | 
						|
<
 | 
						|
2019/01/01
 | 
						|
    (a)         1A @ 1B = 1A @ 2B
 | 
						|
 | 
						|
$ hledger -f- print
 | 
						|
>
 | 
						|
2019-01-01
 | 
						|
    (a)         1A @ 1B = 1A @ 2B
 | 
						|
 | 
						|
>=0
 | 
						|
 | 
						|
# 20. Balance assignments may have a price, and it's used for the posting amount.
 | 
						|
<
 | 
						|
2019/01/01
 | 
						|
    (a)                 = 1A @ 2B
 | 
						|
 | 
						|
$ hledger -f- print --explicit
 | 
						|
>
 | 
						|
2019-01-01
 | 
						|
    (a)         1A @ 2B = 1A @ 2B
 | 
						|
 | 
						|
>=0
 | 
						|
 | 
						|
# 21. The exact amounts are compared; display precision does not affect assertions.
 | 
						|
<
 | 
						|
commodity $1000.00
 | 
						|
 | 
						|
2019/01/01
 | 
						|
    (a)             $0.006
 | 
						|
 | 
						|
2019/01/02
 | 
						|
    (a)             $1.00  = $1.006
 | 
						|
 | 
						|
$ hledger -f- print
 | 
						|
> /2019/
 | 
						|
>=0
 | 
						|
 | 
						|
# 22. This fails
 | 
						|
<
 | 
						|
commodity $1000.00
 | 
						|
 | 
						|
2019/01/01
 | 
						|
    (a)             $0.006
 | 
						|
 | 
						|
2019/01/02
 | 
						|
    (a)             $1.00  = $1.01
 | 
						|
 | 
						|
$ hledger -f- print
 | 
						|
>2 /difference: 0\.004/
 | 
						|
>=1
 | 
						|
 | 
						|
# 23. This fails
 | 
						|
<
 | 
						|
commodity $1000.00
 | 
						|
 | 
						|
2019/01/01
 | 
						|
    (a)             $0.006
 | 
						|
 | 
						|
2019/01/02
 | 
						|
    (a)             $1.00  = $1.0061
 | 
						|
 | 
						|
$ hledger -f- print
 | 
						|
>2 /difference: 0\.0001/
 | 
						|
>=1
 | 
						|
 | 
						|
# 24. Inclusive assertions include balances from subaccounts.
 | 
						|
<
 | 
						|
2019/1/1
 | 
						|
  (a)    X1
 | 
						|
  (a)    Y3
 | 
						|
  (a:b)  Y7
 | 
						|
  (a)    0 =*  X1
 | 
						|
  (a)    0 =*  Y10
 | 
						|
  (a:b)  0 =*  Y7
 | 
						|
  (a:b)  0 ==*  Y7
 | 
						|
 | 
						|
$ hledger -f- print
 | 
						|
>
 | 
						|
2019-01-01
 | 
						|
    (a)                X1
 | 
						|
    (a)                Y3
 | 
						|
    (a:b)              Y7
 | 
						|
    (a)                 0 =* X1
 | 
						|
    (a)                 0 =* Y10
 | 
						|
    (a:b)               0 =* Y7
 | 
						|
    (a:b)               0 ==* Y7
 | 
						|
 | 
						|
>=0
 | 
						|
 | 
						|
# 25. Inclusive balance assignments also work (#1207).
 | 
						|
<
 | 
						|
2020-01-25
 | 
						|
    (a:aa)   1
 | 
						|
 | 
						|
2020-01-25
 | 
						|
    (a:bb)   1
 | 
						|
 | 
						|
2020-01-25
 | 
						|
    (a)      1
 | 
						|
 | 
						|
2020-01-31
 | 
						|
    (a)        ==* 1
 | 
						|
 | 
						|
$ hledger -f- print -x
 | 
						|
>
 | 
						|
2020-01-25
 | 
						|
    (a:aa)               1
 | 
						|
 | 
						|
2020-01-25
 | 
						|
    (a:bb)               1
 | 
						|
 | 
						|
2020-01-25
 | 
						|
    (a)               1
 | 
						|
 | 
						|
2020-01-31
 | 
						|
    (a)              -2 ==* 1
 | 
						|
 | 
						|
>=0
 |