Added new test files.

This commit is contained in:
John Wiegley 2007-05-07 11:37:15 +00:00
parent a99695f69b
commit 30978b7fe5
13 changed files with 460 additions and 287 deletions

View file

@ -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)

View file

@ -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
@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@
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_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_utils.o `test -f 'tests/utility/t_utils.cc' || echo '$(srcdir)/'`tests/utility/t_utils.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`
@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@
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_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_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/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/utility/t_times.cc' || echo '$(srcdir)/'`tests/utility/t_times.cc
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/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/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

View file

@ -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

235
src/balpair.h Normal file
View file

@ -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

View file

@ -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 {

View file

@ -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 */

View file

@ -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()

View file

@ -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()
{
}

View file

@ -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 &copy);
void operator=(const BalanceTestCase &copy);
};
#endif // _T_BALANCE_H

View file

@ -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() {}

10
tests/utility/t_utils.cc Normal file
View file

@ -0,0 +1,10 @@
#include "t_utils.h"
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(UtilitiesTestCase, "utility");
void UtilitiesTestCase::setUp() {}
void UtilitiesTestCase::tearDown() {}
void UtilitiesTestCase::testConstructors()
{
}

28
tests/utility/t_utils.h Normal file
View file

@ -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 &copy);
void operator=(const UtilitiesTestCase &copy);
};
#endif /* _T_UTILS_H */