From 6f5d628b1258ee846eadb16afc392605371a9f59 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Mon, 30 Jan 2017 10:56:10 -0800 Subject: [PATCH] Move test-numeric from src/engine to src/libqof/qof. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s testing a file in qof and doesn’t need to be in engine just because it uses some functions from test-engine-stuff. --- src/engine/test/CMakeLists.txt | 1 - src/engine/test/Makefile.am | 3 +- src/libqof/qof/test/CMakeLists.txt | 24 +++++ src/libqof/qof/test/Makefile.am | 22 +++++ .../qof}/test/test-numeric.cpp | 98 +++---------------- 5 files changed, 58 insertions(+), 90 deletions(-) rename src/{engine => libqof/qof}/test/test-numeric.cpp (90%) diff --git a/src/engine/test/CMakeLists.txt b/src/engine/test/CMakeLists.txt index c7682ddd3c5..bafbbec6e1d 100644 --- a/src/engine/test/CMakeLists.txt +++ b/src/engine/test/CMakeLists.txt @@ -27,7 +27,6 @@ ADD_DEPENDENCIES(check test-link) ADD_ENGINE_TEST(test-load-engine test-load-engine.c) ADD_ENGINE_TEST(test-guid test-guid.cpp) -ADD_ENGINE_TEST(test-numeric test-numeric.cpp) ADD_ENGINE_TEST(test-date test-date.cpp) ADD_ENGINE_TEST(test-object test-object.c) ADD_ENGINE_TEST(test-commodities test-commodities.cpp) diff --git a/src/engine/test/Makefile.am b/src/engine/test/Makefile.am index 762bfea2626..caa6b523946 100644 --- a/src/engine/test/Makefile.am +++ b/src/engine/test/Makefile.am @@ -33,7 +33,6 @@ TEST_GROUP_1 = \ test-link \ test-load-engine \ test-guid \ - test-numeric \ test-date \ test-object \ test-commodities \ @@ -88,7 +87,7 @@ test_commodities_SOURCES = test-commodities.cpp test_date_SOURCES = test-date.cpp test_group_vs_book_SOURCES = test-group-vs-book.cpp test_lots_SOURCES = test-lots.cpp -test_numeric_SOURCES = test-numeric.cpp + test_query_SOURCES = test-query.cpp test_scm_query_SOURCES = test-scm-query.cpp test_split_vs_account_SOURCES = test-split-vs-account.cpp diff --git a/src/libqof/qof/test/CMakeLists.txt b/src/libqof/qof/test/CMakeLists.txt index 672fdebe1a0..de62f165e89 100644 --- a/src/libqof/qof/test/CMakeLists.txt +++ b/src/libqof/qof/test/CMakeLists.txt @@ -19,6 +19,30 @@ SET(test_qof_SOURCES ${CMAKE_SOURCE_DIR}/src/test-core/unittest-support.c ) +SET(TEST_ENGINE_INCLUDE_DIRS + ${TEST_QOF_INCLUDE_DIRS} + ${CMAKE_SOURCE_DIR}/src/engine + ${CMAKE_SOURCE_DIR}/src/engine/test-core + ${CMAKE_BINARY_DIR}/src # for config.h + ) + +SET(TEST_ENGINE_LIBS + ${TEST_QOF_LIBS} + gncmod-test-engine + ) + +SET(test_numeric_SOURCES + ${CMAKE_SOURCE_DIR}/src/engine/cashobjects.c + ${CMAKE_SOURCE_DIR}/src/engine/test-core/test-engine-stuff.cpp + ${CMAKE_SOURCE_DIR}/src/libqof/qof/gnc-numeric.cpp + ${CMAKE_SOURCE_DIR}/src/libqof/qof/gnc-rational.cpp + ${CMAKE_SOURCE_DIR}/src/libqof/qof/gnc-int128.cpp + ${CMAKE_SOURCE_DIR}/src/libqof/qof/test/test-numeric.cpp +) + + +GNC_ADD_TEST(test-numeric "${test_numeric_SOURCES}" TEST_ENGINE_INCLUDE_DIRS TEST_ENGINE_LIBS) + # This test does not on Win32. Worse, it causes a dialog box to # pop up due to an assertion. This interferes with running the tests # unattended. diff --git a/src/libqof/qof/test/Makefile.am b/src/libqof/qof/test/Makefile.am index 2d6b36fee05..ee82db8bf3c 100644 --- a/src/libqof/qof/test/Makefile.am +++ b/src/libqof/qof/test/Makefile.am @@ -25,7 +25,29 @@ test_qof_HEADERS = \ $(top_srcdir)/${MODULEPATH}/qofsession.h \ $(top_srcdir)/src/test-core/unittest-support.h +test_numeric_SOURCES = \ + ${top_srcdir}/src/engine/cashobjects.c \ + ${top_srcdir}/src/test-core/test-stuff.c \ + ${top_srcdir}/src/engine/test-core/test-engine-stuff.cpp \ + ${top_srcdir}/${MODULEPATH}/gnc-numeric.cpp \ + ${top_srcdir}/${MODULEPATH}/gnc-rational.cpp \ + ${top_srcdir}/${MODULEPATH}/gnc-int128.cpp \ + ${top_srcdir}/${MODULEPATH}/test/test-numeric.cpp + +test_numeric_CPPFLAGS = \ + -I${top_srcdir}/src/engine \ + -I${top_srcdir}/src/test-core \ + -I${top_srcdir}/src/engine/test-core \ + -I${top_srcdir}/src \ + -I${top_srcdir}/${MODULEPATH} \ + ${GLIB_CFLAGS} + +test_numeric_LDADD = \ + ${top_builddir}/src/engine/libgncmod-engine.la \ + ${GLIB_LIBS} + check_PROGRAMS = \ + test-numeric \ test-qof TESTS = ${check_PROGRAMS} diff --git a/src/engine/test/test-numeric.cpp b/src/libqof/qof/test/test-numeric.cpp similarity index 90% rename from src/engine/test/test-numeric.cpp rename to src/libqof/qof/test/test-numeric.cpp index bb2f74f6d31..6e6ecfb76e0 100644 --- a/src/engine/test/test-numeric.cpp +++ b/src/libqof/qof/test/test-numeric.cpp @@ -33,7 +33,7 @@ extern "C" #include "gnc-numeric.h" } -#define NREPS 2000 +#define NREPS 2 static char * gnc_numeric_print(gnc_numeric in) @@ -774,30 +774,30 @@ check_mult_div (void) } } - a = gnc_numeric_create(782592055622866ULL, 89025); - b = gnc_numeric_create(2222554708930978ULL, 85568); + a = gnc_numeric_create(INT64_C(1173888083434299), 93773); + b = gnc_numeric_create(INT64_C(2222554708930978), 89579); /* Dividing the above pair overflows, in that after * the division the denominator won't fit into a * 64-bit quantity. This can be seen from - * the factorization int primes: - * 782592055622866 = 2 * 2283317 * 171371749 + * the factorization into primes: + * 1173888083434299 = 3 * 2283317 * 171371749 * (yes, thats a seven and a nine digit prime) * 2222554708930978 = 2 * 1111277354465489 * (yes, that's a sixteen-digit prime number) - * 89025 = 3*5*5*1187 - * 85568= 64*7*191 + * 93773 = 79*1187 + * 89579 = 67*7*191 * If the rounding method is exact/no-round, then * an overflow error should be signalled; else the * divide routine should shift down the results till * the overflow is eliminated. */ -/* Doesn't overflow any more! */ + check_binary_op (gnc_numeric_error (GNC_ERROR_REMAINDER), gnc_numeric_div(a, b, GNC_DENOM_AUTO, GNC_HOW_RND_NEVER | GNC_HOW_DENOM_EXACT), a, b, "expected %s got %s = %s / %s for div exact"); - check_binary_op (gnc_numeric_create(338441, 1000000), + check_binary_op (gnc_numeric_create(504548, 1000000), gnc_numeric_div(a, b, GNC_DENOM_AUTO, GNC_HOW_DENOM_SIGFIGS(6) | GNC_HOW_RND_ROUND), a, b, "expected %s got %s = %s / %s for div round"); @@ -841,7 +841,7 @@ check_mult_div (void) val_tot = gnc_numeric_create (-4280656418LL, 19873); val_a = gnc_numeric_mul (frac, val_tot, gnc_numeric_denom(val_tot), - GNC_HOW_RND_ROUND | GNC_HOW_DENOM_EXACT); + GNC_HOW_RND_ROUND | GNC_HOW_DENOM_REDUCE); check_binary_op (gnc_numeric_create(-2939846940LL, 19873), val_a, val_tot, frac, "expected %s got %s = %s * %s for mult round"); @@ -850,7 +850,7 @@ check_mult_div (void) val_tot = gnc_numeric_create (467013515494988LL, 100); val_a = gnc_numeric_mul (frac, val_tot, gnc_numeric_denom(val_tot), - GNC_HOW_RND_ROUND | GNC_HOW_DENOM_EXACT); + GNC_HOW_RND_ROUND | GNC_HOW_DENOM_REDUCE); check_binary_op (gnc_numeric_create(562854124919LL, 100), val_a, val_tot, frac, "expected %s got %s = %s * %s for mult round"); @@ -869,81 +869,6 @@ check_mult_div (void) } -static void -check_reciprocal(void) -{ - gnc_numeric a, b, ans, val; - double flo; - - val = gnc_numeric_create(-60, 20); - check_unary_op (gnc_numeric_eq, gnc_numeric_create (-3, -1), - gnc_numeric_convert(val, GNC_DENOM_RECIPROCAL(1), - GNC_HOW_RND_NEVER), - val, "expected %s got %s = (%s as RECIP(1))"); - - a = gnc_numeric_create(200, 100); - b = gnc_numeric_create(300, 100); - - /* 2 + 3 = 5 */ - ans = gnc_numeric_add(a, b, GNC_DENOM_RECIPROCAL(1), GNC_HOW_RND_NEVER); - check_binary_op (gnc_numeric_create(5, -1), - ans, a, b, "expected %s got %s = %s + %s for reciprocal"); - - /* 2 + 3 = 5 */ - a = gnc_numeric_create(2, -1); - b = gnc_numeric_create(300, 100); - ans = gnc_numeric_add(a, b, GNC_DENOM_RECIPROCAL(1), GNC_HOW_RND_NEVER); - check_binary_op (gnc_numeric_create(5, -1), - ans, a, b, "expected %s got %s = %s + %s for reciprocal"); - - /* check gnc_numeric_to_double */ - flo = gnc_numeric_to_double(gnc_numeric_create(5, -1)); - do_test ((5.0 == flo), "reciprocal conversion"); - - /* check gnc_numeric_compare */ - a = gnc_numeric_create(2, 1); - b = gnc_numeric_create(2, -1); - do_test((0 == gnc_numeric_compare(a, b)), " 2 == 2 "); - a = gnc_numeric_create(2, 1); - b = gnc_numeric_create(3, -1); - do_test((-1 == gnc_numeric_compare(a, b)), " 2 < 3 "); - a = gnc_numeric_create(-2, 1); - b = gnc_numeric_create(2, -1); - do_test((-1 == gnc_numeric_compare(a, b)), " -2 < 2 "); - a = gnc_numeric_create(2, -1); - b = gnc_numeric_create(3, -1); - do_test((-1 == gnc_numeric_compare(a, b)), " 2 < 3 "); - - /* check for equality */ - a = gnc_numeric_create(2, 1); - b = gnc_numeric_create(2, -1); - do_test(gnc_numeric_equal(a, b), " 2 == 2 "); - - /* check gnc_numeric_mul */ - a = gnc_numeric_create(2, 1); - b = gnc_numeric_create(3, -1); - ans = gnc_numeric_mul(a, b, GNC_DENOM_RECIPROCAL(1), GNC_HOW_RND_NEVER); - check_binary_op (gnc_numeric_create(6, -1), - ans, a, b, "expected %s got %s = %s * %s for reciprocal"); - - /* check gnc_numeric_div */ - /* -60 / 20 = -3 */ - a = gnc_numeric_create(-60, 1); - b = gnc_numeric_create(2, -10); - ans = gnc_numeric_div(a, b, GNC_DENOM_RECIPROCAL(1), GNC_HOW_RND_NEVER); - check_binary_op (gnc_numeric_create(-3, -1), - ans, a, b, "expected %s got %s = %s / %s for reciprocal"); - - /* 60 / 20 = 3 */ - a = gnc_numeric_create(60, 1); - b = gnc_numeric_create(2, -10); - ans = gnc_numeric_div(a, b, GNC_DENOM_RECIPROCAL(1), GNC_HOW_RND_NEVER); - check_binary_op (gnc_numeric_create(3, -1), - ans, a, b, "expected %s got %s = %s / %s for reciprocal"); - - -} - /* ======================================================= */ static void @@ -958,7 +883,6 @@ run_test (void) check_add_subtract(); check_add_subtract_overflow (); check_mult_div (); - check_reciprocal(); } int