Re: Debugging assertion failures / printing the value of a value expression

2017-10-19 Thread Michael Cooper
This isn't a direct answer to your question, but this is how I do these
kind of balance checks:

2017/01/01 * Opening Balance
Assets:Checking$1000
Equity:Opening

2017/01/02 * Savings
Assets:Savings  $100
Assets:Checking

2017/01/03 * Reconcile
[Assets:Checking]  $0 = $900
[Assets:Savings]   $0 = $100

2017/01/04 * Savings
Assets:Savings  $100
Assets:Checking

2017/01/05 * Reconcile
[Assets:Checking]  $0 = $800
[Assets:Savings]   $0 = $200

This works well. I read these reconcile transactions as "If $0 is added to
the account, the balance should be $800".

If I instead change the last reconcile to "[Assets:Checking]  $0 = $700"
(that is, make it $100 off) I get this error:

While parsing file "/home/mythmon/tmp/foo.ledger", line 18:
While parsing posting:
  [Assets:Checking]  $0 = $700
  
Error: Balance assertion off by $-100 (expected to see $800)

This shows me both the value I said it should be ($700), the value Ledger
says it should be ($800), and the difference ($-100). All of these end up
being very useful at different times.

I leave these in my ledger files. This gives me both a history of balances,
and also a sort of test suite. If I change the organization of my files,
change rules, or do other refactoring, these assertions give me confidence
that I didn't break anything.

-Michael Cooper


On Thu, Oct 19, 2017 at 3:43 PM John Lee  wrote:

> An example that currently has me puzzled: the first assert below passes,
> and the second fails.  I'm interested both in learning why in this
> particular case, and more important, learning how to use ledger to debug
> problems like this in general.
>
> 2017-10-01 * Opening Balance
> Assets:CurrentAccount   $1000
> Equity:OpeningBalance
>
> 2017-10-02 * Savings
> Assets:CurrentAccount:Savings   $100
> Assets:CurrentAccount
>
> assert account("Assets:CurrentAccount").total == $1000
>
> 2017-10-03 * Savings
> Assets:CurrentAccount:Savings   $100
> Assets:CurrentAccount
>
> assert account("Assets:CurrentAccount").total == $1000
>
>
> This surprises me because if I comment that last assert out and run
> ledger b '^Assets:CurrentAccount$' I get $800, and ledger b
> '^Assets:CurrentAccount:Savings$' prints $200 -- which adds to $1000,
> and indeed ledger b '^Assets:CurrentAccount' prints $1000.  Bug??  How
> can I see what ledger *thinks* the total is when it evaluates the
> assert?
>
>
> On Thu, 19 Oct 2017, at 23:13, John Lee wrote:
> > Sometimes the assert expressions I'm adding to my ledger file fail and I
> > don't immediately know why.  If I have something like this:
> >
> > assert account("Assets:CurrentAccount").total == $123.45
> >
> > and I'm wrong about the total, then I'll just be told that I'm wrong,
> > and not what the correct value is.  What's the easiest way to get ledger
> > to compute and print the correct value?
> >
> > Maybe there's a way to print out account values at a given point in a
> > ledger file?  In particular, maybe there's a way to print the values of
> > value expressions as the ledger file is evaluated by a command like
> > balance?
> >
> > I realize it's good to be able to see what the answer is before one
> > writes it down, but sometimes it just saves time to have the computer
> > work it out so you can see quickly what you did wrong.
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "Ledger" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to ledger-cli+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"Ledger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ledger-cli+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Debugging assertion failures / printing the value of a value expression

2017-10-19 Thread John Lee
An example that currently has me puzzled: the first assert below passes,
and the second fails.  I'm interested both in learning why in this
particular case, and more important, learning how to use ledger to debug
problems like this in general.

2017-10-01 * Opening Balance
Assets:CurrentAccount   $1000
Equity:OpeningBalance

2017-10-02 * Savings
Assets:CurrentAccount:Savings   $100
Assets:CurrentAccount

assert account("Assets:CurrentAccount").total == $1000

2017-10-03 * Savings
Assets:CurrentAccount:Savings   $100
Assets:CurrentAccount

assert account("Assets:CurrentAccount").total == $1000


This surprises me because if I comment that last assert out and run
ledger b '^Assets:CurrentAccount$' I get $800, and ledger b
'^Assets:CurrentAccount:Savings$' prints $200 -- which adds to $1000,
and indeed ledger b '^Assets:CurrentAccount' prints $1000.  Bug??  How
can I see what ledger *thinks* the total is when it evaluates the
assert?


On Thu, 19 Oct 2017, at 23:13, John Lee wrote:
> Sometimes the assert expressions I'm adding to my ledger file fail and I
> don't immediately know why.  If I have something like this:
> 
> assert account("Assets:CurrentAccount").total == $123.45
> 
> and I'm wrong about the total, then I'll just be told that I'm wrong,
> and not what the correct value is.  What's the easiest way to get ledger
> to compute and print the correct value?
> 
> Maybe there's a way to print out account values at a given point in a
> ledger file?  In particular, maybe there's a way to print the values of
> value expressions as the ledger file is evaluated by a command like
> balance?
> 
> I realize it's good to be able to see what the answer is before one
> writes it down, but sometimes it just saves time to have the computer
> work it out so you can see quickly what you did wrong.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"Ledger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ledger-cli+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Debugging assertion failures / printing the value of a value expression

2017-10-19 Thread John Lee
Sometimes the assert expressions I'm adding to my ledger file fail and I
don't immediately know why.  If I have something like this:

assert account("Assets:CurrentAccount").total == $123.45

and I'm wrong about the total, then I'll just be told that I'm wrong,
and not what the correct value is.  What's the easiest way to get ledger
to compute and print the correct value?

Maybe there's a way to print out account values at a given point in a
ledger file?  In particular, maybe there's a way to print the values of
value expressions as the ledger file is evaluated by a command like
balance?

I realize it's good to be able to see what the answer is before one
writes it down, but sometimes it just saves time to have the computer
work it out so you can see quickly what you did wrong.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"Ledger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ledger-cli+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.