diff options
author | John Wiegley <johnw@newartisans.com> | 2009-06-16 16:23:58 +0100 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-06-16 16:23:58 +0100 |
commit | 463f741ed247f7486a5bdce8a331281887f476fe (patch) | |
tree | f015127bfd65371efcdbf715716bae8dfd5f732e | |
parent | 3c692a94d42349e6f0d40ec8341f6fd4d6052a6e (diff) | |
download | fork-ledger-463f741ed247f7486a5bdce8a331281887f476fe.tar.gz fork-ledger-463f741ed247f7486a5bdce8a331281887f476fe.tar.bz2 fork-ledger-463f741ed247f7486a5bdce8a331281887f476fe.zip |
Allow an amount to be zero, even if cost is non-zero
The only real change is that exchanges of zero-amount will not result in
any exchange at all, just the "motions".
Fixes 6DAB9FE3-1399-4727-9AB1-FE413FB85A03
-rw-r--r-- | src/commodity.cc | 6 | ||||
-rw-r--r-- | test/regress/6DAB9FE3.test | 10 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/commodity.cc b/src/commodity.cc index 67a86b87..d826feb6 100644 --- a/src/commodity.cc +++ b/src/commodity.cc @@ -418,11 +418,13 @@ commodity_t::exchange(const amount_t& amount, if (commodity.annotated) current_annotation = &as_annotated_commodity(commodity).details; - amount_t per_unit_cost = (is_per_unit ? cost : cost / amount).abs(); + amount_t per_unit_cost = + (is_per_unit || amount.is_realzero() ? cost : cost / amount).abs(); DEBUG("commodity.prices.add", "exchange: per-unit-cost = " << per_unit_cost); - exchange(commodity, per_unit_cost, moment ? *moment : CURRENT_TIME()); + if (! per_unit_cost.is_realzero()) + exchange(commodity, per_unit_cost, moment ? *moment : CURRENT_TIME()); cost_breakdown_t breakdown; breakdown.final_cost = ! is_per_unit ? cost : cost * amount; diff --git a/test/regress/6DAB9FE3.test b/test/regress/6DAB9FE3.test new file mode 100644 index 00000000..50b944ae --- /dev/null +++ b/test/regress/6DAB9FE3.test @@ -0,0 +1,10 @@ +reg -E +<<< +2009/01/01 Sample + assets 0 FOO @ $8.88 + equity +>>>1 +09-Jan-01 Sample assets 0 0 + equity 0 0 +>>>2 +=== 0 |