diff options
-rw-r--r-- | Makefile.am | 80 | ||||
-rw-r--r-- | Makefile.in | 129 | ||||
-rw-r--r-- | src/balance.h | 194 | ||||
-rw-r--r-- | src/balpair.h | 235 | ||||
-rw-r--r-- | src/value.h | 3 | ||||
-rw-r--r-- | tests/UnitTests.h | 2 | ||||
-rw-r--r-- | tests/numerics/t_amount.cc | 5 | ||||
-rw-r--r-- | tests/numerics/t_balance.cc | 25 | ||||
-rw-r--r-- | tests/numerics/t_balance.h | 30 | ||||
-rw-r--r-- | tests/utility/t_times.cc (renamed from tests/numerics/t_times.cc) | 2 | ||||
-rw-r--r-- | tests/utility/t_times.h (renamed from tests/numerics/t_times.h) | 0 | ||||
-rw-r--r-- | tests/utility/t_utils.cc | 10 | ||||
-rw-r--r-- | tests/utility/t_utils.h | 28 |
13 files changed, 458 insertions, 285 deletions
diff --git a/Makefile.am b/Makefile.am index 251be397..59d2add1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -92,48 +92,50 @@ endif libpyledger_la_CPPFLAGS = $(libledger_la_CPPFLAGS) -libpyledger_la_LDFLAGS = -release $(PACKAGE_VERSION) +libpyledger_la_LDFLAGS = -release $(PACKAGE_VERSION) libpyledger_la_SOURCES = \ - src/py_utils.cc \ - src/py_times.cc \ + src/py_utils.cc \ + src/py_times.cc \ src/py_amount.cc pkginclude_HEADERS = \ - src/amount.h \ - src/balance.h \ - src/commodity.h \ - src/binary.h \ - src/context.h \ - src/csv.h \ - src/derive.h \ - src/emacs.h \ - src/fdstream.hpp \ - src/format.h \ - src/gnucash.h \ - src/journal.h \ - src/ledger.h \ - src/mask.h \ - src/ofx.h \ - src/option.h \ - src/parser.h \ - src/pyinterp.h \ - src/pyfstream.h \ - src/pyledger.h \ - src/qif.h \ - src/quotes.h \ - src/reconcile.h \ - src/register.h \ - src/report.h \ - src/session.h \ - src/system.hh \ - src/textual.h \ - src/times.h \ - src/transform.h \ - src/utils.h \ - src/value.h \ - src/xml.h \ + src/amount.h \ + src/balpair.h \ + src/balance.h \ + src/binary.h \ + src/commodity.h \ + src/context.h \ + src/csv.h \ + src/derive.h \ + src/emacs.h \ + src/flags.h \ + src/format.h \ + src/gnucash.h \ + src/journal.h \ + src/ledger.h \ + src/mask.h \ + src/ofx.h \ + src/option.h \ + src/parser.h \ + src/pyfstream.h \ + src/pyinterp.h \ + src/pyledger.h \ + src/pyutils.h \ + src/qif.h \ + src/quotes.h \ + src/reconcile.h \ + src/register.h \ + src/report.h \ + src/scoped_execute.h \ + src/session.h \ + src/textual.h \ + src/times.h \ + src/transform.h \ + src/utils.h \ + src/value.h \ + src/xml.h \ src/xpath.h ###################################################################### @@ -214,9 +216,11 @@ check_PROGRAMS = $(TESTS) nodist_UnitTests_SOURCES = tests/UnitTests.cc \ \ - tests/numerics/t_times.cc \ + tests/utility/t_utils.cc \ + tests/utility/t_times.cc \ tests/numerics/t_commodity.cc \ - tests/numerics/t_amount.cc + tests/numerics/t_amount.cc \ + tests/numerics/t_balance.cc UnitTests_CPPFLAGS = -I$(srcdir)/tests $(libledger_la_CPPFLAGS) UnitTests_LDFLAGS = $(LIBADD_DL) diff --git a/Makefile.in b/Makefile.in index 7f05f1d6..1d270283 100644 --- a/Makefile.in +++ b/Makefile.in @@ -132,8 +132,9 @@ am_PyUnitTests_OBJECTS = PyUnitTests_OBJECTS = $(am_PyUnitTests_OBJECTS) PyUnitTests_LDADD = $(LDADD) nodist_UnitTests_OBJECTS = UnitTests-UnitTests.$(OBJEXT) \ - UnitTests-t_times.$(OBJEXT) UnitTests-t_commodity.$(OBJEXT) \ - UnitTests-t_amount.$(OBJEXT) + UnitTests-t_utils.$(OBJEXT) UnitTests-t_times.$(OBJEXT) \ + UnitTests-t_commodity.$(OBJEXT) UnitTests-t_amount.$(OBJEXT) \ + UnitTests-t_balance.$(OBJEXT) UnitTests_OBJECTS = $(nodist_UnitTests_OBJECTS) UnitTests_DEPENDENCIES = $(lib_LTLIBRARIES) gdtoa/libgdtoa.la UnitTests_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ @@ -373,44 +374,46 @@ libledger_la_SOURCES = src/utils.cc src/times.cc src/mask.cc \ libpyledger_la_CPPFLAGS = $(libledger_la_CPPFLAGS) libpyledger_la_LDFLAGS = -release $(PACKAGE_VERSION) libpyledger_la_SOURCES = \ - src/py_utils.cc \ - src/py_times.cc \ + src/py_utils.cc \ + src/py_times.cc \ src/py_amount.cc pkginclude_HEADERS = \ - src/amount.h \ - src/balance.h \ - src/commodity.h \ - src/binary.h \ - src/context.h \ - src/csv.h \ - src/derive.h \ - src/emacs.h \ - src/fdstream.hpp \ - src/format.h \ - src/gnucash.h \ - src/journal.h \ - src/ledger.h \ - src/mask.h \ - src/ofx.h \ - src/option.h \ - src/parser.h \ - src/pyinterp.h \ - src/pyfstream.h \ - src/pyledger.h \ - src/qif.h \ - src/quotes.h \ - src/reconcile.h \ - src/register.h \ - src/report.h \ - src/session.h \ - src/system.hh \ - src/textual.h \ - src/times.h \ - src/transform.h \ - src/utils.h \ - src/value.h \ - src/xml.h \ + src/amount.h \ + src/balpair.h \ + src/balance.h \ + src/binary.h \ + src/commodity.h \ + src/context.h \ + src/csv.h \ + src/derive.h \ + src/emacs.h \ + src/flags.h \ + src/format.h \ + src/gnucash.h \ + src/journal.h \ + src/ledger.h \ + src/mask.h \ + src/ofx.h \ + src/option.h \ + src/parser.h \ + src/pyfstream.h \ + src/pyinterp.h \ + src/pyledger.h \ + src/pyutils.h \ + src/qif.h \ + src/quotes.h \ + src/reconcile.h \ + src/register.h \ + src/report.h \ + src/scoped_execute.h \ + src/session.h \ + src/textual.h \ + src/times.h \ + src/transform.h \ + src/utils.h \ + src/value.h \ + src/xml.h \ src/xpath.h ledger_CPPFLAGS = $(libledger_la_CPPFLAGS) @@ -439,9 +442,11 @@ dist_lisp_LISP = lisp/ledger.el lisp/timeclock.el @HAVE_BOOST_PYTHON_TRUE@ $(am__append_16) $(am__append_17) nodist_UnitTests_SOURCES = tests/UnitTests.cc \ \ - tests/numerics/t_times.cc \ + tests/utility/t_utils.cc \ + tests/utility/t_times.cc \ tests/numerics/t_commodity.cc \ - tests/numerics/t_amount.cc + tests/numerics/t_amount.cc \ + tests/numerics/t_balance.cc UnitTests_CPPFLAGS = -I$(srcdir)/tests $(libledger_la_CPPFLAGS) UnitTests_LDFLAGS = $(LIBADD_DL) @@ -596,8 +601,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-UnitTests.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-t_amount.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-t_balance.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-t_commodity.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-t_times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-t_utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ledger-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ledger-option.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-amount.Plo@am__quote@ @@ -880,19 +887,33 @@ UnitTests-UnitTests.obj: tests/UnitTests.cc @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-UnitTests.obj `if test -f 'tests/UnitTests.cc'; then $(CYGPATH_W) 'tests/UnitTests.cc'; else $(CYGPATH_W) '$(srcdir)/tests/UnitTests.cc'; fi` -UnitTests-t_times.o: tests/numerics/t_times.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_times.o -MD -MP -MF $(DEPDIR)/UnitTests-t_times.Tpo -c -o UnitTests-t_times.o `test -f 'tests/numerics/t_times.cc' || echo '$(srcdir)/'`tests/numerics/t_times.cc +UnitTests-t_utils.o: tests/utility/t_utils.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_utils.o -MD -MP -MF $(DEPDIR)/UnitTests-t_utils.Tpo -c -o UnitTests-t_utils.o `test -f 'tests/utility/t_utils.cc' || echo '$(srcdir)/'`tests/utility/t_utils.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-t_utils.Tpo $(DEPDIR)/UnitTests-t_utils.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/utility/t_utils.cc' object='UnitTests-t_utils.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_utils.o `test -f 'tests/utility/t_utils.cc' || echo '$(srcdir)/'`tests/utility/t_utils.cc + +UnitTests-t_utils.obj: tests/utility/t_utils.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_utils.obj -MD -MP -MF $(DEPDIR)/UnitTests-t_utils.Tpo -c -o UnitTests-t_utils.obj `if test -f 'tests/utility/t_utils.cc'; then $(CYGPATH_W) 'tests/utility/t_utils.cc'; else $(CYGPATH_W) '$(srcdir)/tests/utility/t_utils.cc'; fi` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-t_utils.Tpo $(DEPDIR)/UnitTests-t_utils.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/utility/t_utils.cc' object='UnitTests-t_utils.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_utils.obj `if test -f 'tests/utility/t_utils.cc'; then $(CYGPATH_W) 'tests/utility/t_utils.cc'; else $(CYGPATH_W) '$(srcdir)/tests/utility/t_utils.cc'; fi` + +UnitTests-t_times.o: tests/utility/t_times.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_times.o -MD -MP -MF $(DEPDIR)/UnitTests-t_times.Tpo -c -o UnitTests-t_times.o `test -f 'tests/utility/t_times.cc' || echo '$(srcdir)/'`tests/utility/t_times.cc @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-t_times.Tpo $(DEPDIR)/UnitTests-t_times.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/numerics/t_times.cc' object='UnitTests-t_times.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/utility/t_times.cc' object='UnitTests-t_times.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_times.o `test -f 'tests/numerics/t_times.cc' || echo '$(srcdir)/'`tests/numerics/t_times.cc +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_times.o `test -f 'tests/utility/t_times.cc' || echo '$(srcdir)/'`tests/utility/t_times.cc -UnitTests-t_times.obj: tests/numerics/t_times.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_times.obj -MD -MP -MF $(DEPDIR)/UnitTests-t_times.Tpo -c -o UnitTests-t_times.obj `if test -f 'tests/numerics/t_times.cc'; then $(CYGPATH_W) 'tests/numerics/t_times.cc'; else $(CYGPATH_W) '$(srcdir)/tests/numerics/t_times.cc'; fi` +UnitTests-t_times.obj: tests/utility/t_times.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_times.obj -MD -MP -MF $(DEPDIR)/UnitTests-t_times.Tpo -c -o UnitTests-t_times.obj `if test -f 'tests/utility/t_times.cc'; then $(CYGPATH_W) 'tests/utility/t_times.cc'; else $(CYGPATH_W) '$(srcdir)/tests/utility/t_times.cc'; fi` @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-t_times.Tpo $(DEPDIR)/UnitTests-t_times.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/numerics/t_times.cc' object='UnitTests-t_times.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/utility/t_times.cc' object='UnitTests-t_times.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_times.obj `if test -f 'tests/numerics/t_times.cc'; then $(CYGPATH_W) 'tests/numerics/t_times.cc'; else $(CYGPATH_W) '$(srcdir)/tests/numerics/t_times.cc'; fi` +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_times.obj `if test -f 'tests/utility/t_times.cc'; then $(CYGPATH_W) 'tests/utility/t_times.cc'; else $(CYGPATH_W) '$(srcdir)/tests/utility/t_times.cc'; fi` UnitTests-t_commodity.o: tests/numerics/t_commodity.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_commodity.o -MD -MP -MF $(DEPDIR)/UnitTests-t_commodity.Tpo -c -o UnitTests-t_commodity.o `test -f 'tests/numerics/t_commodity.cc' || echo '$(srcdir)/'`tests/numerics/t_commodity.cc @@ -922,6 +943,20 @@ UnitTests-t_amount.obj: tests/numerics/t_amount.cc @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_amount.obj `if test -f 'tests/numerics/t_amount.cc'; then $(CYGPATH_W) 'tests/numerics/t_amount.cc'; else $(CYGPATH_W) '$(srcdir)/tests/numerics/t_amount.cc'; fi` +UnitTests-t_balance.o: tests/numerics/t_balance.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_balance.o -MD -MP -MF $(DEPDIR)/UnitTests-t_balance.Tpo -c -o UnitTests-t_balance.o `test -f 'tests/numerics/t_balance.cc' || echo '$(srcdir)/'`tests/numerics/t_balance.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-t_balance.Tpo $(DEPDIR)/UnitTests-t_balance.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/numerics/t_balance.cc' object='UnitTests-t_balance.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_balance.o `test -f 'tests/numerics/t_balance.cc' || echo '$(srcdir)/'`tests/numerics/t_balance.cc + +UnitTests-t_balance.obj: tests/numerics/t_balance.cc +@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-t_balance.obj -MD -MP -MF $(DEPDIR)/UnitTests-t_balance.Tpo -c -o UnitTests-t_balance.obj `if test -f 'tests/numerics/t_balance.cc'; then $(CYGPATH_W) 'tests/numerics/t_balance.cc'; else $(CYGPATH_W) '$(srcdir)/tests/numerics/t_balance.cc'; fi` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-t_balance.Tpo $(DEPDIR)/UnitTests-t_balance.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/numerics/t_balance.cc' object='UnitTests-t_balance.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(UnitTests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-t_balance.obj `if test -f 'tests/numerics/t_balance.cc'; then $(CYGPATH_W) 'tests/numerics/t_balance.cc'; else $(CYGPATH_W) '$(srcdir)/tests/numerics/t_balance.cc'; fi` + ledger-option.o: src/option.cc @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ledger_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ledger-option.o -MD -MP -MF $(DEPDIR)/ledger-option.Tpo -c -o ledger-option.o `test -f 'src/option.cc' || echo '$(srcdir)/'`src/option.cc @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/ledger-option.Tpo $(DEPDIR)/ledger-option.Po diff --git a/src/balance.h b/src/balance.h index 40f1eec0..614bffc7 100644 --- a/src/balance.h +++ b/src/balance.h @@ -230,200 +230,6 @@ inline std::ostream& operator<<(std::ostream& out, const balance_t& bal) { return out; } -class balance_pair_t - : public equality_comparable<balance_pair_t, - equality_comparable<balance_pair_t, balance_t, - equality_comparable<balance_pair_t, amount_t, - additive<balance_pair_t, - additive<balance_pair_t, balance_t, - additive<balance_pair_t, amount_t, - multiplicative<balance_pair_t, unsigned long, - multiplicative<balance_pair_t, long, - multiplicative<balance_pair_t, amount_t> > > > > > > > > -{ - balance_t quantity; - optional<balance_t> cost; - - friend class value_t; - friend class entry_base_t; - -public: - // constructors - balance_pair_t() { - TRACE_CTOR(balance_pair_t, ""); - } - balance_pair_t(const balance_pair_t& bal_pair) - : quantity(bal_pair.quantity), cost(bal_pair.cost) { - TRACE_CTOR(balance_pair_t, "copy"); - } - balance_pair_t(const balance_t& _quantity) - : quantity(_quantity) { - TRACE_CTOR(balance_pair_t, "const balance_t&"); - } - balance_pair_t(const amount_t& _quantity) - : quantity(_quantity) { - TRACE_CTOR(balance_pair_t, "const amount_t&"); - } - ~balance_pair_t() { - TRACE_DTOR(balance_pair_t); - } - - // assignment operator - balance_pair_t& operator=(const balance_pair_t& bal_pair) { - if (this != &bal_pair) { - quantity = bal_pair.quantity; - cost = bal_pair.cost; - } - return *this; - } - - // in-place arithmetic - balance_pair_t& operator+=(const balance_pair_t& bal_pair) { - if (bal_pair.cost && ! cost) - cost = quantity; - quantity += bal_pair.quantity; - if (cost) - *cost += bal_pair.cost ? *bal_pair.cost : bal_pair.quantity; - return *this; - } - balance_pair_t& operator-=(const balance_pair_t& bal_pair) { - if (bal_pair.cost && ! cost) - cost = quantity; - quantity -= bal_pair.quantity; - if (cost) - *cost -= bal_pair.cost ? *bal_pair.cost : bal_pair.quantity; - return *this; - } - - // comparison - bool operator==(const balance_pair_t& bal_pair) const { - return quantity == bal_pair.quantity; - } - bool operator==(const balance_t& bal) const { - return quantity == bal; - } - bool operator==(const amount_t& amt) const { - return quantity == amt; - } - - balance_pair_t& operator*=(const amount_t& amt) { - quantity *= amt; - if (cost) - *cost *= amt; - return *this; - } - balance_pair_t& operator/=(const amount_t& amt) { - quantity /= amt; - if (cost) - *cost /= amt; - return *this; - } - - // unary negation - void in_place_negate() { - quantity.in_place_negate(); - if (cost) - cost->in_place_negate(); - } - balance_pair_t negate() const { - balance_pair_t temp = *this; - temp.in_place_negate(); - return temp; - } - balance_pair_t operator-() const { - return negate(); - } - - // test for non-zero (use ! for zero) - operator bool() const { - return quantity; - } - - bool is_realzero() const { - return ((! cost || cost->is_realzero()) && quantity.is_realzero()); - } - - balance_pair_t abs() const { - balance_pair_t temp = *this; - temp.quantity = temp.quantity.abs(); - if (temp.cost) - temp.cost = temp.cost->abs(); - return temp; - } - - optional<amount_t> amount(const optional<const commodity_t&>& commodity = - optional<const commodity_t&>()) const { - return quantity.amount(commodity); - } - optional<balance_t> value(const optional<moment_t>& moment = - optional<moment_t>()) const { - return quantity.value(moment); - } - - balance_t - strip_annotations(const bool keep_price = amount_t::keep_price, - const bool keep_date = amount_t::keep_date, - const bool keep_tag = amount_t::keep_tag) const { - return quantity.strip_annotations(keep_price, keep_date, keep_tag); - } - - void print(std::ostream& out, const int first_width, - const int latter_width = -1) const { - quantity.print(out, first_width, latter_width); - } - - balance_pair_t& add(const amount_t& amt, - const optional<amount_t>& a_cost = optional<amount_t>()) { - if (a_cost && ! cost) - cost = quantity; - quantity += amt; - if (cost) - *cost += a_cost ? *a_cost : amt; - return *this; - } - - bool valid() { - return quantity.valid() && (! cost || cost->valid()); - } - - void in_place_reduce() { - quantity.in_place_reduce(); - if (cost) cost->in_place_reduce(); - } - balance_pair_t reduce() const { - balance_pair_t temp(*this); - temp.in_place_reduce(); - return temp; - } - - void in_place_round() { - quantity = quantity.round(); - if (cost) - cost = cost->round(); - } - balance_pair_t round() const { - balance_pair_t temp(*this); - temp.in_place_round(); - return temp; - } - - balance_pair_t unround() const { - balance_pair_t temp(quantity.unround()); - if (cost) - temp.cost = cost->unround(); - return temp; - } - - friend std::ostream& operator<<(std::ostream& out, - const balance_pair_t& bal_pair); -}; - -inline std::ostream& operator<<(std::ostream& out, - const balance_pair_t& bal_pair) { - bal_pair.quantity.print(out, 12); - return out; -} - } // namespace ledger #endif // _BALANCE_H diff --git a/src/balpair.h b/src/balpair.h new file mode 100644 index 00000000..358b74f4 --- /dev/null +++ b/src/balpair.h @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2003-2007, John Wiegley. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of New Artisans LLC nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _BALPAIR_H +#define _BARPAIR_H + +#include "balance.h" + +namespace ledger { + +class balance_pair_t + : public equality_comparable<balance_pair_t, + equality_comparable<balance_pair_t, balance_t, + equality_comparable<balance_pair_t, amount_t, + additive<balance_pair_t, + additive<balance_pair_t, balance_t, + additive<balance_pair_t, amount_t, + multiplicative<balance_pair_t, unsigned long, + multiplicative<balance_pair_t, long, + multiplicative<balance_pair_t, amount_t> > > > > > > > > +{ + balance_t quantity; + optional<balance_t> cost; + + friend class value_t; + friend class entry_base_t; + +public: + // constructors + balance_pair_t() { + TRACE_CTOR(balance_pair_t, ""); + } + balance_pair_t(const balance_pair_t& bal_pair) + : quantity(bal_pair.quantity), cost(bal_pair.cost) { + TRACE_CTOR(balance_pair_t, "copy"); + } + balance_pair_t(const balance_t& _quantity) + : quantity(_quantity) { + TRACE_CTOR(balance_pair_t, "const balance_t&"); + } + balance_pair_t(const amount_t& _quantity) + : quantity(_quantity) { + TRACE_CTOR(balance_pair_t, "const amount_t&"); + } + ~balance_pair_t() { + TRACE_DTOR(balance_pair_t); + } + + // assignment operator + balance_pair_t& operator=(const balance_pair_t& bal_pair) { + if (this != &bal_pair) { + quantity = bal_pair.quantity; + cost = bal_pair.cost; + } + return *this; + } + + // in-place arithmetic + balance_pair_t& operator+=(const balance_pair_t& bal_pair) { + if (bal_pair.cost && ! cost) + cost = quantity; + quantity += bal_pair.quantity; + if (cost) + *cost += bal_pair.cost ? *bal_pair.cost : bal_pair.quantity; + return *this; + } + balance_pair_t& operator-=(const balance_pair_t& bal_pair) { + if (bal_pair.cost && ! cost) + cost = quantity; + quantity -= bal_pair.quantity; + if (cost) + *cost -= bal_pair.cost ? *bal_pair.cost : bal_pair.quantity; + return *this; + } + + // comparison + bool operator==(const balance_pair_t& bal_pair) const { + return quantity == bal_pair.quantity; + } + bool operator==(const balance_t& bal) const { + return quantity == bal; + } + bool operator==(const amount_t& amt) const { + return quantity == amt; + } + + balance_pair_t& operator*=(const amount_t& amt) { + quantity *= amt; + if (cost) + *cost *= amt; + return *this; + } + balance_pair_t& operator/=(const amount_t& amt) { + quantity /= amt; + if (cost) + *cost /= amt; + return *this; + } + + // unary negation + void in_place_negate() { + quantity.in_place_negate(); + if (cost) + cost->in_place_negate(); + } + balance_pair_t negate() const { + balance_pair_t temp = *this; + temp.in_place_negate(); + return temp; + } + balance_pair_t operator-() const { + return negate(); + } + + // test for non-zero (use ! for zero) + operator bool() const { + return quantity; + } + + bool is_realzero() const { + return ((! cost || cost->is_realzero()) && quantity.is_realzero()); + } + + balance_pair_t abs() const { + balance_pair_t temp = *this; + temp.quantity = temp.quantity.abs(); + if (temp.cost) + temp.cost = temp.cost->abs(); + return temp; + } + + optional<amount_t> amount(const optional<const commodity_t&>& commodity = + optional<const commodity_t&>()) const { + return quantity.amount(commodity); + } + optional<balance_t> value(const optional<moment_t>& moment = + optional<moment_t>()) const { + return quantity.value(moment); + } + + balance_t + strip_annotations(const bool keep_price = amount_t::keep_price, + const bool keep_date = amount_t::keep_date, + const bool keep_tag = amount_t::keep_tag) const { + return quantity.strip_annotations(keep_price, keep_date, keep_tag); + } + + void print(std::ostream& out, const int first_width, + const int latter_width = -1) const { + quantity.print(out, first_width, latter_width); + } + + balance_pair_t& add(const amount_t& amt, + const optional<amount_t>& a_cost = optional<amount_t>()) { + if (a_cost && ! cost) + cost = quantity; + quantity += amt; + if (cost) + *cost += a_cost ? *a_cost : amt; + return *this; + } + + bool valid() { + return quantity.valid() && (! cost || cost->valid()); + } + + void in_place_reduce() { + quantity.in_place_reduce(); + if (cost) cost->in_place_reduce(); + } + balance_pair_t reduce() const { + balance_pair_t temp(*this); + temp.in_place_reduce(); + return temp; + } + + void in_place_round() { + quantity = quantity.round(); + if (cost) + cost = cost->round(); + } + balance_pair_t round() const { + balance_pair_t temp(*this); + temp.in_place_round(); + return temp; + } + + balance_pair_t unround() const { + balance_pair_t temp(quantity.unround()); + if (cost) + temp.cost = cost->unround(); + return temp; + } + + friend std::ostream& operator<<(std::ostream& out, + const balance_pair_t& bal_pair); +}; + +inline std::ostream& operator<<(std::ostream& out, + const balance_pair_t& bal_pair) { + bal_pair.quantity.print(out, 12); + return out; +} + +} // namespace ledger + +#endif // _BALPAIR_H diff --git a/src/value.h b/src/value.h index a6bb091f..eba9f6a0 100644 --- a/src/value.h +++ b/src/value.h @@ -32,8 +32,7 @@ #ifndef _VALUE_H #define _VALUE_H -#include "amount.h" -#include "balance.h" +#include "balpair.h" // pulls in balance.h and amount.h namespace ledger { diff --git a/tests/UnitTests.h b/tests/UnitTests.h index 5edfb5d3..e7027cf4 100644 --- a/tests/UnitTests.h +++ b/tests/UnitTests.h @@ -19,4 +19,6 @@ using namespace ledger; #define assertMessage(x,y) CPPUNIT_ASSERT_MESSAGE(x,y) #define assertThrow(x,y) CPPUNIT_ASSERT_THROW(x,y) +#define internalAmount(x) amount_t::exact(x) + #endif /* _UNITTESTS_H */ diff --git a/tests/numerics/t_amount.cc b/tests/numerics/t_amount.cc index 67ea1781..a59ff2ea 100644 --- a/tests/numerics/t_amount.cc +++ b/tests/numerics/t_amount.cc @@ -1,7 +1,5 @@ #include "t_amount.h" -#define internalAmount(x) amount_t::exact(x) - CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(AmountTestCase, "numerics"); void AmountTestCase::setUp() @@ -11,7 +9,8 @@ void AmountTestCase::setUp() // Cause the display precision for dollars to be initialized to 2. amount_t x1("$1.00"); assertTrue(x1); - amount_t::stream_fullstrings = true; // makes error reports from UnitTests accurate + + amount_t::stream_fullstrings = true; // make reports from UnitTests accurate } void AmountTestCase::tearDown() diff --git a/tests/numerics/t_balance.cc b/tests/numerics/t_balance.cc new file mode 100644 index 00000000..ca759836 --- /dev/null +++ b/tests/numerics/t_balance.cc @@ -0,0 +1,25 @@ +#include "t_balance.h" + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(BalanceTestCase, "numerics"); + +void BalanceTestCase::setUp() +{ + ledger::set_session_context(&session); + + // Cause the display precision for dollars to be initialized to 2. + amount_t x1("$1.00"); + assertTrue(x1); + + amount_t::stream_fullstrings = true; // make reports from UnitTests accurate +} + +void BalanceTestCase::tearDown() +{ + amount_t::stream_fullstrings = false; + + ledger::set_session_context(); +} + +void BalanceTestCase::testConstructors() +{ +} diff --git a/tests/numerics/t_balance.h b/tests/numerics/t_balance.h new file mode 100644 index 00000000..7c27f7e8 --- /dev/null +++ b/tests/numerics/t_balance.h @@ -0,0 +1,30 @@ +#ifndef _T_BALANCE_H +#define _T_BALANCE_H + +#include "UnitTests.h" + +class BalanceTestCase : public CPPUNIT_NS::TestCase +{ + CPPUNIT_TEST_SUITE(BalanceTestCase); + + CPPUNIT_TEST(testConstructors); + + CPPUNIT_TEST_SUITE_END(); + +public: + ledger::session_t session; + + BalanceTestCase() {} + virtual ~BalanceTestCase() {} + + virtual void setUp(); + virtual void tearDown(); + + void testConstructors(); + +private: + BalanceTestCase(const BalanceTestCase ©); + void operator=(const BalanceTestCase ©); +}; + +#endif // _T_BALANCE_H diff --git a/tests/numerics/t_times.cc b/tests/utility/t_times.cc index 0d89d03f..c2d6fe64 100644 --- a/tests/numerics/t_times.cc +++ b/tests/utility/t_times.cc @@ -1,6 +1,6 @@ #include "t_times.h" -CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(DateTimeTestCase, "numerics"); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(DateTimeTestCase, "utility"); void DateTimeTestCase::setUp() {} void DateTimeTestCase::tearDown() {} diff --git a/tests/numerics/t_times.h b/tests/utility/t_times.h index 5bbadf21..5bbadf21 100644 --- a/tests/numerics/t_times.h +++ b/tests/utility/t_times.h diff --git a/tests/utility/t_utils.cc b/tests/utility/t_utils.cc new file mode 100644 index 00000000..eda84a3a --- /dev/null +++ b/tests/utility/t_utils.cc @@ -0,0 +1,10 @@ +#include "t_utils.h" + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(UtilitiesTestCase, "utility"); + +void UtilitiesTestCase::setUp() {} +void UtilitiesTestCase::tearDown() {} + +void UtilitiesTestCase::testConstructors() +{ +} diff --git a/tests/utility/t_utils.h b/tests/utility/t_utils.h new file mode 100644 index 00000000..97154bae --- /dev/null +++ b/tests/utility/t_utils.h @@ -0,0 +1,28 @@ +#ifndef _T_UTILS_H +#define _T_UTILS_H + +#include "UnitTests.h" + +class UtilitiesTestCase : public CPPUNIT_NS::TestCase +{ + CPPUNIT_TEST_SUITE(UtilitiesTestCase); + + CPPUNIT_TEST(testConstructors); + + CPPUNIT_TEST_SUITE_END(); + +public: + UtilitiesTestCase() {} + virtual ~UtilitiesTestCase() {} + + virtual void setUp(); + virtual void tearDown(); + + void testConstructors(); + +private: + UtilitiesTestCase(const UtilitiesTestCase ©); + void operator=(const UtilitiesTestCase ©); +}; + +#endif /* _T_UTILS_H */ |